grep命令 指定格式的字符串,去匹配指定的文档 grep -E ==egrep
grep egrep sed awk 均支持正则表达式
正则表达式:指定格式的字符串,去匹配指定的行
grep --color 'root' /etc/passwd 匹配关键字,高亮显示
grep --color -n 'root' /etc/passwd 匹配关键字,高亮显示,并显示行号
grep --color -c 'root' /etc/passwd 只统计匹配了的总行数,不显示具体内容
grep --color -v 'root' /etc/passwd 显示没有匹配的内容,反选。
grep --color -A2 'root' /etc/passwd 显示匹配行,且匹配行的下2行也打印出来
grep --color -B2 'root' /etc/passwd 显示匹配行,且匹配行的上2行也打印出来
grep --color -C2 'root' /etc/passwd 显示匹配行,且匹配行的上下2行也打印出来
grep --color -r 'root' /etc/ 递归查找/etc下所有文件中,包含关键字的行
grep --color -rh 'root' /etc/ 递归查找/etc下所有文件中,包含关键字的行
去掉第一行的文件路径和名称, -h不显示文件路径和名称
正则表达式中,特殊符号的含义总结:
. 任意1个字符
* *号前字符的0-无穷个
.* 任意个任意字符
? ?前字符的0-1个
+ +前字符的1-无穷个
| |符号前后字符的任意一个(或者关系)
() ()内容为一个整体,需全部匹配
{} {}内一般是数字,指匹配的次数,可多次匹配。
[] []内的字符,任意匹配一个即可。
例: grep '[0-9a-zA-Z]' 2.txt 匹配数字和英文的行
grep '^[0-9a-zA-Z]' 2.txt 匹配数字和英文开头的行
grep '[^0-9a-zA-Z]' 2.txt 匹配不是数字和英文开头的行
grep '^$' 2.txt 匹配空行
grep 'r.o' 2.txt 匹配包含r+任意1个字符+o的行
grep 'r*o' 2.txt 匹配包含o或者ro rro rrr...o的行
grep 'r.*o' 2.txt 匹配r开头o结尾的行 (贪婪匹配)
? + | () {} 符号特殊,使用grep时必须使用转义符\ ,或者参数-E ,或者命令egrep
grep -E 'r?o' 匹配o或者ro的行
grep -E 'root|nologin' 2.txt 匹配root或者nologin的行 (或者关系)
grep 'root' 2.txt |grep 'nologin' 匹配2次 (并且关系)
egrep '(rr)+' 2.txt 匹配rr的1-无穷个 (整体匹配)
egrep '(rr){1,3}' 2.txt {}中为匹配次数,可以多次匹配。