grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。通常grep有三种版本grep、egrep(等同于grep -E)和fgrep。egrep为扩展的grep,fgrep则为快速grep(固定的字符串来对文本进行搜索,不支持正则表达式的引用但是查询极为快速)。grep是Linux文本处理三剑客之一。
常用选项: –color=auto:对匹配到的文本着色后进行高亮显示;
-c:只输出匹配的行数
-i:匹配时忽略大小写
-h:多文件匹配时不显示文件名,默认显示、
-l:只列出符合匹配的文件名,而不显示匹配的行内容
-n:显示行号、
-s:不显示错误消息
-q:禁止输出任何结果,以退出状态表示搜索是否成功 $? 查看,值0或者1
-v:取反,显示不包含匹配文件本的所有行
-o:只显示被匹配到的字符串
-C n:显示匹配字符前后面的行数
-A n:显示匹配字符后面的行数
-B n:显示匹配字符前面的行数 n:数值
-e : 实现多个参数之间的 ‘或’ 的关系 eg: grep -e root -e bash /ect/passwd
-w : 匹配单词
注:使用grep匹配时需使用双引号引起来(单引号为强引用),防止被系统误认为参数或者特殊命令而报错。
使用方式:egrep [OPTIONS] PATTERN [FILE…]
或 grep -E [OPTIONS] PATTERN [FILE…]
扩展正则表达式在基本正则表达式上进行了修改,主要取消反斜线转移,更容易看
.: 任意单个字符
[]: 指定范围内的任意单个字符
[^]: 指定范围外的任意单个字符
*:匹配其前面的字符任意次;
?: 匹配其前面的字符0或1次;
+: 匹配其前面的字符至少1次
{m}: 匹配其前面的字符m次;
{m,n}: 至少m次,至多n次
{m,}: 至少m次;
{0,n}:至多n次;
^: 行首
$: 行尾
\<, \b: 词首
\>, \b:词尾
(): 分组
|: 或者, ac|bc
grep -E "con(C|c)at" 匹配conCat或concat
*:前一个字符出现任意次数,包括0次
.* :任意字符出现任意次数
\?:前一个字符出现1次或者0次
\+:出现1次或者1次以上
\{n\}:精确匹配次数
\{m,n\}:匹配m到n次之间
\{n,\} :匹配最少n次以上
\{,n\} :匹配最多n次以上
[a-z]\+ : 任意一个字符至少出现一次 ;
. 在[]中没有任何意义,就是点本身
^ : 匹配行首
$ ; 匹配行尾
^$: 匹配空白行
[^]:取反匹配
\(匹配内容\) :匹配括号内的内容
\n (数字) :重复前面匹配的内容再匹配
eg:匹配开头行和结尾行一样的行
[root@yufu ~]# grep "^\(.*\):.*/\1$" /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
后向引用:引用前面的分组括号中的模式所匹配到的字符 分组括号中的模式匹配到的内容或被正则表达式引擎自动记录于内部的变量中: \1:模式从左侧起,第一个左括号及与之匹配的右括号之间模式匹配到的内容 \2:模式从左侧起,第二个左括号及与之匹配的右括号之间模式匹配到的内容…
‘[]’:依旧匹配指定范围内的任意单个字符;但是有很多特殊匹配方式。
[:digit:] 匹配任意单个数字
[:lower:] 匹配任意单个小写字母
[:upper:] 匹配任意单个大写字母
[:alpha:] 匹配任意单个字母
[:alnum:] 匹配任意单个字母或数字
[:punct:] 匹配任意单个符号
[:space:] 匹配单个空格
一些地方取消了转义字符的使用:
‘?‘:匹配其前面的字符0次或者1次;
‘+’:匹配其前面的字符1次或者多次;
‘{m}‘:匹配其前面的字符m次(\为转义字符)
‘{m,n}’:匹配其前面的字符至少m次,至多n次
():将一个或多个字符捆绑在一起,当做一个整体进行处理,反向引用照常使用。
‘|’:或(注:‘C|cat’为C与cat,‘(C|c)at才是Cat与cat’)
[root@localhost ~]#cat /proc/meminfo | grep -io "^[s].*"
SwapCached: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Shmem: 6900 kB
Slab: 36828 kB
SReclaimable: 18184 kB
SUnreclaim: 18644 kB
[root@localhost ~]#cat /etc/passwd | grep -v "[bash]$" | cut -d : -f 1
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
...省略...
[root@localhost ~]#cat /etc/passwd | grep "bash$" | cut -d: -f 3 | sort -nr | head -1
1003
[root@yufu ~]# cat /boot/grub/grub.conf | grep "^[[:space:]]\+"
root (hd0,0)
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=96cb6b8f-c3da-41d1-a063-cfd0e8177085 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-696.el6.x86_64.img
[root@yufu ~]# cat /etc/passwd | grep -o "\<[0-9][0-9]\>"
12
10
14
11
12
13
30
14
50
99
99
81
81
69
...省略...
[root@yufu ~]# ifconfig | grep -o "[0-9.]\{7,\}"
192.168.214.187
192.168.214.255
255.255.255.0
127.0.0.1
255.0.0.0
[root@yufu ~]# cat /etc/passwd | grep -E "^\<([[:alpha:]]{1,})\>:.*\1$"
或者:[root@yufu ~]# cat /etc/passwd | grep -E "^\<([a-zA-Z]{1,})\>:.*\1$"
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
#开头的行
[root@yufu ~]# grep "^#.*" /etc/rc.d/rc.sysinit | wc -l
44
#空行
[root@yufu ~]# grep "^$" /etc/rc.d/rc.sysinit | wc -l
100
[root@yufu ~]# df -h | grep "^/dev" | grep -o "[0-9]\+%" | grep -o "[0-9]\+" | sort -nr
29
21
1
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。