shell入门学习笔记-13-命令详解: 三剑客之一grep

版权声明:本文为博主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 -Eegrep
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
  • -oonly
统计行数-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的结合。
  • 如果匹配结果有多个,则以作为分隔符。

猜你喜欢

转载自blog.csdn.net/hanchao5272/article/details/86562096