grep(Globally search a Regular Expression and Print), 全面搜索正则表达式并把行打印出来,是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。
grep选项:
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
grep常用参数
--color:将关键字部分使用颜色显示
[root@node1 ~]# alias cgrep='grep--color=auto'
-v:反向匹配,显示不能被模式匹配到的行
-o:仅匹配被模式匹配到的字串,非整行
-i:不区分大小写
-E:支持扩展
-n:显示行号
-A:后面可加数字,为after的意思,除了列出该行外,后续的 n 行也列出來;
-B:后面可加数字,为bfter的意思,除了列出该行外,后续的 n 行也列出來;
-C:前后各显示一行
grep正则表达式
. (小数点):任意单个字符
[]:指定范围内的任意单个字符
所有数字: [0-9],[[:digit:]]
所有小写字母: [a-z],[[:lower:]]
所有大写字母: [A-Z],[[:upper:]]
所有字母: [[:alpha:]]
所有标点符号: [[:punct:]]
空格: [[:space:]]
[^]:指定范围外的任意单个字符
次数匹配:用来指定匹配前面字符的次数
*(星号):表示重复前一个字符任意次
.*(点星号):表示匹配任意长度的任意字符
?: 表示前一个字符出现0次或者1次
{m}: 表示匹配前一个字符m次
{m,n}: 表示匹配前一个字符至少m次,最多n次
{m,}: 表示匹配前一个字符至少m次
{0,n}: 表示匹配最多n次
位置锚定:指定字符出现的位置
^:锚定行首
$:锚定行位
<:锚定词首
>:锚定词尾
分组:
(ab)*xy
引用:
1:后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式匹配到的内容,意思是说前面出现一次,在1这也要出现一次
grep练习
1、 显示/proc/meminfo文件中的以大小写s的开头的行
2、 取出默认shell为非bash的用户
1
|
[root@node1 ~] # grep -v "bash$" /etc/passwd |cut -d: -f1 |
3、 取出默认shell为bash的且其ID号最大的用户
1
|
[root@node1 ~] # grep "bash$" /etc/passwd |cut -d: -f1|sort -n -t: -k3|tail -1 |
4、 显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行
1
|
[root@node1 ~] # grep "^#[[:space:]]{1,}[^[:space:]]{1,}" /etc/rc.d/rc.sysinit |
5、 显示/boot/grub/grub.conf中至少有一个空白字符的行
1
|
[root@node1 ~] # grep "^[[:space:]]{1,}" /boot/grub/grub.conf |
6、 查出/etc/passwd中一位数或两位数
1
|
[root@node1 ~] # grep --color=auto "<[0-9]{1,2}>" /etc/passwd |
7、 找出ifconfig命令结果中的1到255之间的整数
1
|
[root@node1 ~] # ifconfig |grep -E --color=auto "<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])>" |
8、 添加用户bash和testbash,而后找出当前系统上于其他用户名和默认shell相同的用户
1
|
[root@node1 ~] # grep “^([[:alnum:]]{1,})>.*1$” /etc/passwd |
9、 找出netstat-tan命令执行的结果中以“LISTEN”或“ESTABLISHEN”结尾的行
1
|
netstat -tan | grep -E "(LISTEN|ESTABLISHED)[[:space:]]*" |