版权声明:本文为博主hanchao5272原创文章,转载请注明来源,并留下原文链接地址,谢谢! https://blog.csdn.net/hanchao5272/article/details/86562096
系列目录与参考文献传送门: shell入门学习笔记-序章
grep
Global search Regular Expression and Print out the line
: 全局搜索正则表达式并将结果打印出来。
简单查询
admindeMacBook-Pro:myshell admin$ cat look.txt
ImOK
admin console Jan 4 14:07
admin ttys000 Jan 4 14:07
admin ttys001 Jan 7 17:52
admin ttys002 Jan 7 18:05
admindeMacBook-Pro:myshell admin$ grep ttys000 look.txt
admin ttys000 Jan 4 14:07
admindeMacBook-Pro:myshell admin$ grep "Jan 4" look.txt
admin console Jan 4 14:07
admin ttys000 Jan 4 14:07
多文件查找
admindeMacBook-Pro:myshell admin$ grep ttys000 look.txt at.txt
look.txt:admin ttys000 Jan 4 14:07
at.txt:admin ttys000 Jan 4 14:07
反向查找-v
admindeMacBook-Pro:myshell admin$ grep -v ttys look.txt
ImOK
admin console Jan 4 14:07
标记匹配颜色--color=auto
admindeMacBook-Pro:myshell admin$ grep ttys00 look.txt --color=auto
admin ttys000 Jan 4 14:07
admin ttys001 Jan 7 17:52
admin ttys002 Jan 7 18:05
正则grep -E
或egrep
admindeMacBook-Pro:myshell admin$ grep -E "[0-9]+" look.txt --color=auto
admin console Jan 4 14:07
admin ttys000 Jan 4 14:07
admin ttys001 Jan 7 17:52
admin ttys002 Jan 7 18:05
admindeMacBook-Pro:myshell admin$ egrep "[0-9]+" look.txt --color=auto
admin console Jan 4 14:07
admin ttys000 Jan 4 14:07
admin ttys001 Jan 7 17:52
admin ttys002 Jan 7 18:05
只输出匹配内容-o
admindeMacBook-Pro:myshell admin$ egrep -o "[0-9]{3}" look.txt
000
001
002
-o
:only
统计行数-c
admindeMacBook-Pro:myshell admin$ grep ttys look.txt
admin ttys000 Jan 4 14:07
admin ttys001 Jan 7 17:52
admin ttys002 Jan 7 18:05
admindeMacBook-Pro:myshell admin$ grep -c ttys look.txt
3
-c
:count
显示行号-n
admindeMacBook-Pro:myshell admin$ grep -n ttys look.txt --color=auto
3:admin ttys000 Jan 4 14:07
4:admin ttys001 Jan 7 17:52
5:admin ttys002 Jan 7 18:05
搜索多个文件
admindeMacBook-Pro:myshell admin$ grep -l ttys look.txt at.txt
look.txt
at.txt
admindeMacBook-Pro:myshell admin$ grep -l ttys *.txt
at.txt
look.txt
grep ttys *.txt
递归搜索目录-r
admindeMacBook-Pro:myshell admin$ grep -r ttys000 .
./look.txt:admin ttys000 Jan 4 14:07
./at.txt:admin ttys000 Jan 4 14:07
./subshell/looook.t:admin ttys000 Jan 4 14:07
admindeMacBook-Pro:myshell admin$ grep -r ttys000 subshell/
subshell//looook.t:admin ttys000 Jan 4 14:07
.
当前目录
忽略大小写-i
admindeMacBook-Pro:myshell admin$ grep TTYS000 look.txt
admindeMacBook-Pro:myshell admin$ grep TTYS000 -i look.txt
admin ttys000 Jan 4 14:07
-i
:忽略大小写。- 默认大小写敏感。
匹配多个样式-e
或-f
# -e
admindeMacBook-Pro:myshell admin$ echo you are 20 years old | grep -e "you years" --color -o
admindeMacBook-Pro:myshell admin$ echo you are 20 years old | grep -e you -e years
you are 20 years old
admindeMacBook-Pro:myshell admin$ echo you are 20 years old | grep -e you -e years -e hhhh
you are 20 years old
admindeMacBook-Pro:myshell admin$ echo you are 20 years old | grep -e you -e years -o
you
years
# -f
admindeMacBook-Pro:myshell admin$ cat reg.d
you
years
admindeMacBook-Pro:myshell admin$ echo you are 20 years old | grep -f reg.d
you are 20 years old
- 匹配多个样式:至少有一个匹配即可,无需全部匹配。
-f
要求每个规则独占一行。
包含或排除文件--include --exclude
admindeMacBook-Pro:myshell admin$ grep ttys000 -r .
./me.bak:admin ttys000 Jan 4 14:07
./look.txt:admin ttys000 Jan 4 14:07
./at.txt:admin ttys000 Jan 4 14:07
./here.ppp:admin ttys000 Jan 4 14:07
./subshell/looook.t:admin ttys000 Jan 4 14:07
admindeMacBook-Pro:myshell admin$ grep ttys000 -r . --include *.txt
./at.txt:admin ttys000 Jan 4 14:07
静默输出-q
admindeMacBook-Pro:myshell admin$ grep ttys000 look.txt
admin ttys000 Jan 4 14:07
admindeMacBook-Pro:myshell admin$ grep ttys000 -q look.txt
-q
:quiet
- 不会输出信息,如果存在则返回值为0,否则非0。
- 可用来做条件判断
显示前后行-A -B -C
admindeMacBook-Pro:myshell admin$ seq 3
1
2
3
admindeMacBook-Pro:myshell admin$ seq 10 | grep 5 -A 2 #显示匹配行及After的2行
5
6
7
admindeMacBook-Pro:myshell admin$ seq 10 | grep 5 -B 2 #显示匹配行及Before的2行
3
4
5
admindeMacBook-Pro:myshell admin$ seq 10 | grep 5 -C 2 #显示匹配行及After的2行和Before的2行
3
4
5
6
7
admindeMacBook-Pro:myshell admin$ seq 10 | grep 5 -A 2 -B 2 #-C等于-A与-B的结合
3
4
5
6
7
admindeMacBook-Pro:myshell admin$ echo -e "1\n2\n3\n4\n5\n1\n2\n3\n4\n5" | grep 4 -A 1
4
5
--
4
5
-A
:After
即显示匹配行及之后的n行。-B
:Before
即显示匹配行及之前的n行。-C
:-C
等于-A
与-B
的结合。- 如果匹配结果有多个,则以
—
作为分隔符。