grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。
ID name gender age email phone 1 Bob male 28 abc@qq.com 18023394012 2 Alice female 24 def@gmail.com 18084925203 3 Tony male 21 aaa@163.com 17048792503 4 Kevin male 21 bbb@189.com 17023929033 5 Alex male 18 ccc@xyz.com 18185904230 6 Andy female 22 ddd@139.com 18923902352 7 Jerry female 25 exdsa@189.com 18785234906 8 Peter male 20 bax@qq.com 17729348758 9 Steven female 23 bc@sohu.com 15947893212 10 Bruce female 27 bcbd@139.com 13942943905
2、常用示例
(1)基本过滤
过滤a.txt中Peter所在行的信息。
1 2 3
grep Peter a.txt # 输出如下 8 Peter male 20 bax@qq.com 17729348758
多文件过滤,在多个文件中查找数字6相关的行信息:
1 2 3 4 5 6
grep 6 a.txt c.txt # 输出如下: a.txt:3 Tony male 21 aaa@163.com 17048792503 a.txt:6 Andy female 22 ddd@139.com 18923902352 a.txt:7 Jerry female 25 exdsa@189.com 18785234906 c.txt:2019-01-16_15:00_index?uid=9710
(2) 反向过滤 -v 选项
在a.txt中过滤除@之外的所有行:
1 2 3
grep -v "@" a.txt # 输出如下: ID name gender age email phone
(3) 标记匹配颜色 —color=auto 选项
在a.txt中过滤aaa字符串相关的所有行:
1 2 3
grep aaa a.txt --color=auto # 输出如下: 3 Tony male 21 aaa@163.com 17048792503
(4)使用正则表达式 -E 选项
在a.txt中过滤正则表达式[0-9]相关的所有行:
1 2 3 4 5
grep -E [0-9] a.txt --color=auto # 输出如下: 1 Bob male 28 abc@qq.com 18023394012 2 Alice female 24 def@gmail.com 18084925203 ......
(5)指定输出 -o 选项
在a.txt中输出匹配到的内容,而不是行。
1 2 3
grep -o name a.txt # 输出如下: name
(6)匹配字符串的行数 -c 选项
在a.txt中输出匹配字符串@的行数。
1 2 3
grep -c "@" a.txt # 输出如下: 10
(7)输出匹配字符串的行数 -n 选项
在a.txt中输出匹配字符串@的行,并输出行号。
1 2 3 4 5 6 7 8 9 10 11 12
grep -n "@" a.txt # 输出如下: 2:1 Bob male 28 abc@qq.com 18023394012 3:2 Alice female 24 def@gmail.com 18084925203 4:3 Tony male 21 aaa@163.com 17048792503 5:4 Kevin male 21 bbb@189.com 17023929033 6:5 Alex male 18 ccc@xyz.com 18185904230 7:6 Andy female 22 ddd@139.com 18923902352 8:7 Jerry female 25 exdsa@189.com 18785234906 9:8 Peter male 20 bax@qq.com 17729348758 10:9 Steven female 23 bc@sohu.com 15947893212 11:10 Bruce female 27 bcbd@139.com 13942943905
(8)查找内容所在文件名 -l 选项
在a.txt和c.txt中过滤带有字符@的问件。
1 2 3
grep -l "@" a.txt c.txt # 输出如下: a.txt
(9)递归搜索文件 -r 选项
在当前目录中对文本@进行递归搜索:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
grep "@" -r . # 输出如下: ./a.txt:1 Bob male 28 abc@qq.com 18023394012 ./a.txt:2 Alice female 24 def@gmail.com 18084925203 ./a.txt:3 Tony male 21 aaa@163.com 17048792503 ./a.txt:4 Kevin male 21 bbb@189.com 17023929033 ./a.txt:5 Alex male 18 ccc@xyz.com 18185904230 ./a.txt:6 Andy female 22 ddd@139.com 18923902352 ./a.txt:7 Jerry female 25 exdsa@189.com 18785234906 ./a.txt:8 Peter male 20 bax@qq.com 17729348758 ./a.txt:9 Steven female 23 bc@sohu.com 15947893212 ./a.txt:10 Bruce female 27 bcbd@139.com 13942943905 # .表示当前目录。
(10)忽略字符大小写 -i 选项
在a.txt中过滤bob字符串相关的行,忽略大小写。
1 2 3
grep -i bob a.txt # 输出如下: 1 Bob male 28 abc@qq.com 18023394012
(11)多个匹配样式 -e 选项
在a.txt中过滤bob和Tony字符串相关的行
1 2 3 4
grep -e "Bob" -e "Tony" a.txt # 输出如下: 1 Bob male 28 abc@qq.com 18023394012 3 Tony male 21 aaa@163.com 17048792503