马哥博客作业第三周

筅森魡賤 提交于 2020-04-05 17:11:43

 grep常用选项总结

grep是Linux中最常用的"文本处理工具"之一,grep、sed和awk合称Linux中的文本三剑客grep命令主要对文本(正则表达式)的行基于模式进行过滤

gerp与正则表达式结合使用时功能很强大
下面对grep常用选项进行解释
为了方便解释我提前建好了一个测试文件
[root@centos8 ~]#cat test.txt
clg abc
abc clg 123
test abcc
ABC TEST123
fghj

qwer


首先想要从文件中搜索包含"test"字符串可以使用下面命令
[root@centos8 ~]#grep "test" test.txt
test abcc


可以看到包含"test"字符串的行被打印了出来并且带着颜色的

所以在centos8中使用grep命令时不用指定"--color=auto"选项,默认会高亮显示被匹配的关键字


grep命令是区分大小写的,所以在文件中包含大写"TEST"没有被打印出来
如果想在搜索时不区分大小写可以使用"-i"选项 范例如下
[root@centos8 ~]#grep -i "test" test.txt
test abcc
ABC TEST123

在搜索时想要知道那一行包含被搜索的字符串时 可以使用"-n"范例如下
[root@centos8 ~]#grep -n "clg" test.txt
1:clg abc
2:abc clg 123

有时我们只关心有多少行包含"test"字符串 而不想知道具体哪些行包含指定字符串
可以使用 -c 选项 范例如下
[root@centos8 ~]#grep -c "test" test.txt
1

当我们需要反向查找时 即不包含"test"字符串的行 可以使用"-v"选项 范例如下
[root@centos8 ~]#grep -v "test" test.txt
clg abc
abc clg 123
ABC TEST123
fghj

qwer


在搜索时想要限定匹配多少次后停止"-m"选项可以满足
[root@centos8 ~]#grep -m 1  "test" test.txt
test abcc
即匹配1次后停止

注意:选项后面必须要有数字,否则会保错


当我们只想判断某个字符串是否存在,有或者没有,而不关心里面的内容
可以使用静默模式 范例如下
[root@centos8 ~]#grep -q "test" test.txt
[root@centos8 ~]#echo $?
0
[root@centos8 ~]#grep -q "test111111" test.txt
[root@centos8 ~]#echo $?
1
-q选项,表示静默模式 使用时不会输出任何信息。
我们需要查看是否匹配到时可以使用"echo $?"命令
如果返回值为0,则证明匹配到了指定字符串
如果返回值为1,则证明没有匹配到了指定字符串。

如果想要同时匹配多个目标 可以使用"-e"选项 范例如下
[root@centos8 ~]#grep -e "test" -e "clg" test.txt
clg abc
abc clg 123
test abcc
即包含这两个字符串任意一个都可以都会被搜索到 可以理解为或的关系。

[root@centos8 ~]#grep -A1 "test" test.txt
test abcc
ABC TEST123
上例中 "-A" 选项表示显示符合条件的行的同时还显示之后的行
同理"-A3"同时还显示之后的3行
与"-A"相似还有"-B" "-C"选项
"-B"选项表示显示符合条件的行的同时还显示之前的行
"-C"选项表示显示符合条件的行的同时还显示其前后的行
"-A" "-B" "-C" 分别是After Before Context 三个单词缩写
注意:这三个选项后面必须要有数字,否则会保错

[root@centos8 ~]#grep "123" test.txt
abc clg 123
ABC TEST123
[root@centos8 ~]#grep -o "123" test.txt
123
123
[root@centos8 ~]#grep -on "123" test.txt
2:123
4:123
上例中"-o"选项仅显示匹配到的字符串

 

总结:

--color=auto 对匹配到的文本着色显示
-i:忽略字符大小写
-n:显示匹配的行号
-c:显示匹配到的行数(注意:是匹配到的总行数,不是匹配到的次数)
-v:显示不被匹配到的行 (取反)
-m#:显示匹配#次后停止
-q:静默模式,不输出任何信息
-e:实现多个选项间的匹配,逻辑or关系
-A#:选项表示显示符合条件的行的同时还显示之后的#行(A:After)
-B#:选项表示显示符合条件的行的同时还显示之前的#行(A:Before)
-C#:选项表示显示符合条件的行的同时还显示之前和之后的#行(A:Context)
-o:仅显示匹配到的字符串
-E:使用ERE,相当于egrep

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!