grep工具的使用

grep工具

  grep是一种强大的文本搜索工具,是一个对行进行操作的搜索工作,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix 的 grep 家族包括 grep 、egrep 、 fgrep 。egrep 表示扩展的 grep ,相比 grep 支持更多的元字符。
  grep -E 相当于 egrep 。
  fgrep 是 fast grep ,不支持元字符,但是搜索速度更快。grep 过滤的结果被送到屏幕,不影响原文件内容。
  grep不加引号直接过滤字符串 ;grep在进行模式匹配的时候必须加引号,单引号和双引号都可以 ;grep在引用变量的时候必须加双引号
  参数:
     -r : 递归搜索
     -b : 显示输出行的从文件开始起的字节偏移量。
     -c : 符合条件的行数
     -q : 不显示任何信息。
     -v : 反向选取
     -l : 列出文件内容符合指定的范本样式的文件名称。
     -o : 只显示被模式匹配到的字符串,而不是整个行
     -i : 匹配时不区分大小写
     -A5 : 显示匹配到的行时,显示后面的 5 行
     -B5 : 显示匹配到的行时,前面的 5 行
     -C5 : 显示匹配到的行时,前后的 5 行
     -E : 使用扩展的正则表达式(egrep)
     [:digit:] : 所有数字,相当于 0-9 或者 \d
     [:lower:] :所有的小写字母
     [:upper:]:所有的大写字母
     [:alpha:] :所有的字母
     [:alnum:] :相当于[0-9a-zA-Z]
     [:space:] :空白字符,相当于 \s
     [:punct:] :所有标点符号
     .*:匹配任意长度的任意字符
    ?:匹配其前面的字符0次或1次;"a?b"指的就是a后面到b中间可以有一个字符或者什么都没有
     {m}:匹配m次
     {m,n}:至少m次,最多n次
     {m,}:至少m次;多的话贪婪匹配(贪婪模式匹配:尽可能的去匹配。永无止境)
     {0,n}:至多n次
     ^$:锚定空白行
     <或\b锚定词首
     >或\b锚定词尾
     ():指的就是括号里面的字符属于一个组,在一块的就匹配显示出来

grep命令练习

1.写入一个文件,匹配1-255的数字:

# cat > num.txt << EOF
> 115
> 11
> 255
> 256
> 335
> EOF
# egrep "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>" num.txt

grep命令相近的命令 grep命令例子_其他
grep命令相近的命令 grep命令例子_字符串_02

2.分组:

# cat test.txt << EOF
> He like his liker
> He love his lover
> She love her lover
> She like her lover
> EOF
# grep "l..e.*l..er" tes.txt
# grep "\(l..e\).*\lr" test.txt

grep命令相近的命令 grep命令例子_字符串_03
grep命令相近的命令 grep命令例子_模式匹配_04
grep命令相近的命令 grep命令例子_字符串_05

3.找出/etc/passwd文件中一位数和两位数:

# grep "\<[0-9]\{1,2\}>" /etc/passwd

grep命令相近的命令 grep命令例子_其他_06

4.在网络配置文件 /etc/sysconfig/network-scripts/ifcfg-ens16777736 中检索出所有的 IP:

# egrep "\b(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}\
> ([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b" \
> /etc/sysconfig/network-scripts/ifcfg-ens16777736

grep命令相近的命令 grep命令例子_linux_07

5.使用egrep取出路径的目录名:

echo "/etc/rc.d/init.d/functions/" |egrep -o "/.*[^/]" |egrep -o "/.*/"

grep命令相近的命令 grep命令例子_其他_08

6.显示ifconfig命令结果中所有IPv4地址:

ifconfig |egrep -o "\<(([0-9|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}\
> ([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-9]|25[0-5])\>"

grep命令相近的命令 grep命令例子_字符串_09

7.显示所有包含一个大写字母,后跟四个小写字母,一个空格,和一个大写字母的行:

# cat datafile |grep [A-Z][a-z][a-z][a-z][a-z]' '[A-Z]

grep命令相近的命令 grep命令例子_模式匹配_10

8.显示工资为六位数的行,并在前面加行号:

# grep -n '[0-9]\{6\}$' datafile

grep命令相近的命令 grep命令例子_字符串_11

9.显示包括Lincoln或lincoln的行,并且grep对字母大小不受影响:

# grep -i '[L|l]incoln' datafile

grep命令相近的命令 grep命令例子_字符串_12

10.显示/etc/init.d/functions中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行:

# grep '^#[[:space:]]\{1,\}[^[:space:]]' /etc/init.d/functions

grep命令相近的命令 grep命令例子_模式匹配_13

11.过滤字符出现的次数

# grep 'o\{2\}' test.txt

grep命令相近的命令 grep命令例子_模式匹配_14

12.过滤所有空行和以#开头的行:

# grep -v '^#' test.txt |grep -v '^$'

grep命令相近的命令 grep命令例子_其他_15

13.匹配字符串数:

# grep -c "root" test.txt

grep命令相近的命令 grep命令例子_其他_16

14.过滤test文件中的大写开头和空行,并显示行数:

# grep -v '^[A-Z]' test.txt |grep -v '^&' -n

grep命令相近的命令 grep命令例子_模式匹配_17

15.显示以数字和#开头,并显示行数:

# grep -v '^[a-zA-Z]' test.txt |grep -n -v '^$'

grep命令相近的命令 grep命令例子_模式匹配_18

16.在11111的上下5行内过滤数字开头,并显示行数:

# egrep -C5 '11111' test.txt |grep -v -n '^[0-9]'

grep命令相近的命令 grep命令例子_搜索_19

17.匹配所有字母开头:

# grep -i '^[a-z]' test.txt

grep命令相近的命令 grep命令例子_搜索_20

18.过滤oo:

# egrep 'o++' test.txt

grep命令相近的命令 grep命令例子_字符串_21

19.过滤字符串oo或11,并过滤掉开头是p和m的字符串:

egrep 'oo|ll' test.txt |grep -v '^[p,m]'

grep命令相近的命令 grep命令例子_搜索_22

20.过滤一个oo或多个oo,并显示分组s…l.*n…o:

# egrep '(oo)+' test.txt |grep 's...l.*n..o'

grep命令相近的命令 grep命令例子_搜索_23