grep的简单使用
程序员文章站
2024-02-23 19:31:28
...
Grep
在file…文件中找到能够匹配pattern字符串的行
- 基本格式
grep 要匹配的符号 要进行匹配的文件
grep pattern file...
- pattern 支持正则表达式
- ^ 匹配开头
- $ 匹配结尾
- [a-z] 匹配a-z字符集
- \d 匹配一个数字
- . 匹配任意字符一次
- 量词
- * 匹配前面的字符任意次
- ? 匹配前面的字符0次或1次
- {n,m} 匹配前面的字符n到m次,比如{1,3}则最少匹配1次,最多匹配3次
- File 可以是一个文件也可以多个文件
- 一个文件: name.txt
- 多个文件: 用分号隔开
- grep a 1.txt 2.txt 3.txt
- 使用通配符来指定多个文件
- *匹配文件名中任何字符串,包括空字符串
- grep a *.log // 在所有log结尾的文件中找出现了a的那些行
- ? 匹配文件名单个字符
- grep a test?.log //匹配test1.log,testa.log,testb.log…的文件含有a的一行
- […] 匹配[]中包含的任何字符
- grep a test[1-2].log //匹配test1.log,test2.log
- [!..] 匹配不在[]中包含的任何字符
- grep a test[!a-z].log
- *匹配文件名中任何字符串,包括空字符串
- 参数
- -i 忽略大小写来进行匹配
- -v 打印没有匹配的,反而不打印匹配的
- -n 显示行号
- -c 显示总共多少行被匹配了,而不是显示被匹配的具体内容
- -o 只显示被pattern匹配到的字符串(默认是把匹配到字符的当前行返回)
例子
grep "a" * //匹配当前目录下所有文件中含有a的行
// 在所有符合test[x].log的文件中匹配,一行中只含有一个数字的行,并返回
// 因为shell里面\有意义,所以要用\\来转义
grep ^\\w$ test?.log //
// 使用""就不用\\转义了
grep "^\w$" test[1-2].log
// 这里可以匹配到kalpa和Kalpa KALPA。。因为忽略大小写
// 因为加了-n 会显示行号
grep "kalpa" test.log -i -n
// 只显示每个文件中匹配的次数而不显示具体内容
grep "kalpa" test.log -c