(2)三剑客之grep
1)grep和egrep定义
grep:在文件中全局查找指定的正则表达式,并打印所有包含该表达式的行
egrep:扩展的egrep,支持更多的正则表达式元字符
2)命令格式
语法:grep [选项] pattern filename1 filename2 ....
#grep "root" /etc/passwd
找到:grep返回的退出状态为0
没找到:grep返回的退出状态为1
找不到指定文件:grep返回的退出状态为2
grep程序的输入可以来自标准输入或管道:ll /etc/ | grep "^d"
3)grep使用的元字符
grep: 使用基本的元字符 ^ $ . * [] [^] [-] \(\) m\{x\} \ \< \>
注:grep也可以使用扩展集中的元字符,仅需要对这些元字符前置一个反斜线
egrep :使用扩展的元字符 + ? () | x{m}
\w 所有字母与数字,[0-9A-Za-z]
\W 所有字符与数字以外的字符 [^0-9A-Za-z]
\b 词边界 "\broot\b" "\<root\>"
4)grep选项
-i 忽略大小写
-l 只列出匹配行所在的文件名 grep -l "root" /etc/passwd /etc/shadow
-n 在每一行前面加上它文件中的相对行号 grep -l "root" /etc/* 2>/dev/null 结合vim /etc/passwd +50 神器
-c 显示成功匹配的行数 grep -c "root" /etc/passwd
-s 禁止显示文件不存在或文件不可读的错误信息 grep -s "root" /etc/fdasfasdfadsfa
-q 静默
-v 反向查找,只显示不匹配的行
-R或-r 递归针对目录 grep -r "root" /etc/
--color 颜色
-o 只显示匹配的内容
-B 除了显示匹配的一行之外,并显示该行之前的num行 grep -B 2 "root" /etc/passwd
-A 除了显示匹配的一行之外,并显示该行之后的num行
-C 除了显示匹配的一行之外,并显示该行之前后各num行
5)常见例子
匹配ip地址:egrep "([0-9]+\.){3}([0-9]+)" /etc/sysconfig/network-scripts/ifcfg-ens33
查看帮助斜线转义:useradd --help | grep "\-g"