如何使用grep命令处理文本?
grep是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep、egrep和fgrep。
格式用法:grep[选项]…模式[文件]…
在每个文件或标准输入中搜索模式。
默认情况下,模式是一个基本的正则表达式(BRE)。
正则表达式的选择和解释:
-E 模式是一个扩展的正则表达式
-e 模式使用模式进行匹配
-f 从文件中获取模式
-i 忽略大小写的区别
-w 强制模式,只匹配完整的单词
查看文件,以这个文件为示例
root@zhaocheng ~]# cat filetestROOT:x:98:0:ROOT:/ROOT:/usr/localroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologin
grep -E 这个是一个扩展的正则表达式,支持匹配多元素,可以通过管道符来连接
[root@zhaocheng ~]# grep -E 'root|ROOT|sync' filetestROOT:x:98:0:ROOT:/ROOT:/usr/localroot:x:0:0:root:/root:/bin/bashsync:x:5:0:sync:/sbin:/bin/syncoperator:x:11:0:operator:/root:/sbin/nologin
而grep -e这是一个标准的匹配,一个e只能匹配一个元素,不支持管道,如果想匹配多个,后面需要再加-e再去匹配
[root@zhaocheng ~]# grep -e 'root' -e 'sync' filetestroot:x:0:0:root:/root:/bin/bashsync:x:5:0:sync:/sbin:/bin/syncoperator:x:11:0:operator:/root:/sbin/nologin
而这里还有一个egrep,这个相当于grep的扩充版本,也就是本来grep -e不支持多元素匹配,不支持管道,而egrep支持管道
可以这么理解egrep(在linux中是grep -E)是扩展的grep
[root@zhaocheng ~]# egrep 'root|sync' filetestroot:x:0:0:root:/root:/bin/bashsync:x:5:0:sync:/sbin:/bin/syncoperator:x:11:0:operator:/root:/sbin/nologin
grep -f 这个一般是用于排查两个文件当中有没有一样的,重复的行,要是有的话,就将重复的行给输出出来,这个/etc/passwd也是一个文件,前面的filetest也是一个文件,由于作出对比我将filetest删除了一部分,这样的话效果会明显,一般工作中要是对两个文件进行排查有没有相同的,有相同的行就过滤出来,可以使用grep -f
格式 grep -f 文件1 文件2
[root@zhaocheng ~]# grep -f filetest /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologin
grep -i 忽略大小写进行匹配,这个''也可以不加
[root@zhaocheng ~]# grep -i 'root' filetestROOT:x:98:0:ROOT:/ROOT:/usr/localroot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin
如果忽略大小写,还想多进行匹配的话,可以使用egrep,相当于grep -E,这样支持管道,进行多行匹配了
[root@zhaocheng ~]# egrep -i 'root|halt' filetestROOT:x:98:0:ROOT:/ROOT:/usr/localroot:x:0:0:root:/root:/bin/bashhalt:x:7:0:halt:/sbin:/sbin/haltoperator:x:11:0:operator:/root:/sbin/nologin
前面使用的匹配都是匹配的行,而只想去匹配一个单词,可以使用-w,
[root@zhaocheng ~]# egrep -w 'halt|sync' filetestsync:x:5:0:sync:/sbin:/bin/synchalt:x:7:0:halt:/sbin:/sbin/halt[root@zhaocheng ~]# egrep -w 'hat|syn' filetest
**其他的一些参数
-s 无消息抑制错误消息
-v 反匹配选择不匹配的行
-V 显示版本信息并退出
--help 显示此帮助文本并退出**
-s 不显示错误信息,比如没有这个文件,加-s就不会输出错误内容
[root@zhaocheng ~]# grep kkkk /etc/shadowsgrep: /etc/shadows: No such file or directory[root@zhaocheng ~]# grep -s kkkk /etc/shadows
-v输出除了lp之外的所有的数据
[root@zhaocheng ~]# grep -v lp filetestlinuxaweqeeqwROOT:x:98:0:ROOT:/ROOT:/usr/localhalt$:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologin#sync:x:5:0:sync:/sbin:/bin/syncmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologinlinuxoooghhrhg
-V输出grep的版本信息并退出
[root@zhaocheng ~]# grep -Vgrep (GNU grep) 2.20Copyright (C) 2014 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later .This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.Written by Mike Haertel and others, see .