语法:
grep [-option] 文件名
1.常用参数
-c: 打印符合要求的行数 | grep -c num grep.txt #15 |
-i :忽略大小写 | grep -i unix grep.tx # The grep command first appeared in Version 6 AT&T UNIX. |
-n:输出符合要求的行和行号 | grep -ni unix grep.txt #295: The grep command first appeared in Version 6 AT&T UNIX. |
-v:打印不符合要求的行,即反选 | grep -vi unix grep.txt |
-A:后跟数字(有无空格都可以),例如-A2 表示打印符合要求的行以及下面两行 | grep -A 2 -i unix grep.txt |
-B:后跟数字,例如-B2表示打印符合要求的行以及上面两行 | grep -B2 -i unix grep.txt |
-C:后跟数字,例如-C2表示打印符合要求的行以及上下各两行 | grep -C2 -i unix grep.txt |
-o:只打印符合要求的内容,而非整行 | grep -o -i unix grep.txt #UNIX |
--color 符合要求的内容加上颜色,值有auto always never | grep --color=auto -i unix grep.txt |
-m num,--max-count=num匹配到num次,不再执行 | grep -m 5 -i unix grep.txt|wc -l #5 |
-w:只显示全字符合的列/td> | adb devices|grep -w device |
2.正则表达式
[]匹配内容 | [0-9]匹配所有包含数字的行:grep '[0-9]' text.txt 123 456 hij789 012ABC [15]匹配1和5 [a-zA-Z]匹配所有字母:grep '[a-zA-Z]' text.txt |
指定要过滤字符出现的次数{n1,n2} 其中n1小于n2,表示重复n1到n2次前面的字符,n2可以为空,表示大于等于n1次。 这个命令结合-o使用,能够看到匹配结果 |
grep 'l{2}' text.txt Hello World grep 'l{1,}' text.txt Hello World grep 'l{1,4}' text.txt Hello World grep -o 'l{2,}' text.txtt |
[^字符]表示匹配除[]之外的字符。注意:此时将去除完全符合的行,混合内容不会去除,空行永远匹配 | grep -n '[^0-9]' text.txt 打印除纯数字以外的行 grep -n '[^a-zA-Z]' text.txt 打印除纯字母以外的行 grep '[^r]oo' test.txt 打印不包含r,但包含oo的行 |
^行的开头 $行的结尾 ^$表示空行 | grep '^[0-9]' text.txt 打印以数字开头的行 grep '[0-9]$' text.txt 打印以数字结尾的行 grep '^$' text.txt 打印空行 grep '^[^a-zA-Z]' test.txt 打印非字母开头的行 |
. 表示任意一个字符 * 0或任意个前面的字符 .* 表示0或多个任意字符,空行也包含在内 |
grep 'e..o' text.txt 把符合e和o之间有2个任意字符的行打印出来 grep 'ooo*' file oo,ooo,oooo.... grep '.*' /etc/passwd 全部打印 |
测试文档
#text.txt
rot#x#0#0#/rot#/bin/bash
operator#x#11#0#operator#/root#/sbin/nologin
operator#x#11#0#operator#/rooot#/sbin/nologin
roooot#x#0#0#/rooooot#/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
示例:
#打印包含bash的行
grep bash text.txt
# 加颜色
grep --color="auto" bash text.txt
# 不知道那个文件包含了想要的内容,可以使用递归-r
grep echo -rl . #在当前目录查找带echo的文件
#先去寻找shell文件,再从文件中匹配echo
find . -name "*.sh" |xargs grep echo