grep的基本格式
grep -[参数] ‘word’ filename
演示案例
head -n 10 /etc/passwd > grep.txt
grep --color 'root' grep.txt 在匹配的内容里,root字样会显示颜色
-v 反向选择
grep -v 'mail' grep.txt 不显示包含mail的行
-n 显示行号
grep -n 'uucp' grep.txt 显示匹配uucp的行号
-c 显示匹配的行数
grep -c 'sbin' grep.txt
-i 不区分大小写
echo "MAIL" >> grep.txt
grep -i 'mail' grep.txt 大写小写的mail都会匹配
-w 精确匹配
grep -w 'bin' grep.txt 此时包含sbin的行不会被查找
grep '\<bin\>' grep.txt 格式\< \>与-w效果一样
grep --color -n -w 'bin' grep.txt
-l和-L -l是一次搜索多个文件,找出指定字符的文件,-L反向选择
[root@localhost four]# grep -l 'bin' *.txt 包含bin的文件名
grep.txt
sed.txt
[root@localhost four]# ls
awk.txt grep.txt sedcommand sed.txt
[root@localhost four]# grep -L 'bin' *.txt 不包含bin的文件名
awk.txt
grep的正则表达
基本正则表达式(BRE):*,^,$,.,[,]
扩展正则表达式(ERE):?,+,|,(,),{,}
grep 'spo*l' grep.txt *表示0个或者是多个o,也就是匹配*前面的字符
grep '^sync' grep.txt 查找以sync为首的行
grep 'bash$' grep.txt 查找末尾为bash的行
grep 'b.n' grep.txt 符号.代表任意一个字符
grep 'ba[shd]h' grep.txt 匹配[]里的任意一个字符,包括bash/bahh/badh
grep --color -n '[^b]in' grep.txt 匹配in前面不是b的行,即使是包含了bin,比如某行里有bin,nologin,也会显示。
grep -n '^[a-z]' grep.txt 以小写字母开头的行
grep '^[^a-zA-Z]' grep.txt 不以字母开头的行,[]里面的^代表反向选择,在[]代表开头
grep -n '\*$' grep.txt 以*为末尾的行,需要转义
grep -E 'MAIL|shutdown' grep.txt 多条件查找,符号|代表或
grep -v '^$' grep.txt 不显示空格
grep -v '^$' grep.txt | grep -v '^#' 不显示空格和注释
grep '12.*56' grep.txt .*表示匹配任何字符,包括空
grep 'spo\{2,\}' grep.txt 匹配2个或以上的o,{2,3}表示2-3个前面的字符,{2}代表刚好2个前面的字符
grep -E 'spo{2,}' grep.txt 与上面效果一样
-A after,除了显示匹配行,还会显示该行下面的内容
grep -A 1 'mail' grep.txt
-B before,除了显示匹配行,还会显示该行上面的内容
grep -B 1 'mail' grep.txt
-C -A和-B同时显示
grep -C 1 'mail' grep.txt
grep -n '[^[:lower:]]:root' grep.txt 非字母
grep -n '^[[:lower:]]' grep.txt 字母开头