自动化运维必须要学的Shell文本处理三剑客之——grep的高级选项


在之前的博客中写过grep的基础用法,基础的grep用法可以参考: 检索和过滤文件内容 —— grep命令,这边我就整理一些比较高级的grep选项和参数供大家参考。

1.格式和选项

grep [ -A ] [ -B ] [ --color=auto ] '指定的字符'  filename

选择与参数:

  • - A :后面可加数字,代表after的意思,出来列出改行外,后续的n行也列出来;
  • - B:后面可加数字,代表befer的意思,出来列出改行外,前面的n行也列出来;
  • - -color=auto 可将正确的那个选取数据列出颜色(centOS7 默认加入该选项)

在这里插入图片描述
注意:grep作为shell文本处理三剑客之一,最重要的功能就是进行字符串数据的对比,然后将符合我们需求的字符串显示出来,grep 在数据中查询一个字符串时,是以整行为单位来进行数据的选取。

2. 结合基础正则练习

参考【鸟哥的Linux私房菜】中的练习文档,可以直接复制下面的文本内容到自己的文本中,也可以使用命令wget http://linux.vbird.org/linux_basic/0330regularex/regular_express.txt 进行下载,我们将使用下面的文件作为案例分析。

文件的内容如下:

[root@cheng0307 ~]# cat regular_express.txt 
"Open Source" is a good mechanism to develop programs.
apple is my favorite food.
Football game is not use feet only.
this dress doesn't fit me.
However, this dress is about $ 3183 dollars.
GNU is free air not free beer.
Her hair is very beauty.
I can't finish the test.
Oh! The soup taste good.
motorcycle is cheap than car.
This window is clear.
the symbol '*' is represented as start.
Oh!     My god!
The gd software is a library for drafting programs.
You are the best is mean you are the no. 1.
The world <Happy> is the same with "glad".
I like dog.
google is the best tools for search keyword.
goooooogle yes!
go! go! Let's go.
# I am VBird

案例1:查找指定的字符串“google”,并显示行号

命令如下:

grep -n "google" regular_express.txt 				#正向查找
grep -vn "google" regular_express.txt				#反向查找

查找结果如图:
在这里插入图片描述

案例2:使用 中括号 [ ] 进行查找相关字符

要求1:查找 test 或者 taste 这两个字符串

命令如下:

grep "t[ae]st" regular_express.txt 

查找结果如图:
在这里插入图片描述
要求2:查找字符串“oo”,并且前面不是以“g”开头的行

命令如下:

grep -n "[^g]oo" regular_express.txt

查找结果如图:
在这里插入图片描述
其他相关要求:
在这里插入图片描述
补充:特殊符号的意思

特殊符号代表的意思
[:alnum:]代表英文大小写字符及数字,即0-9、a-z 、A-Z
[:alpha:]代表任何英文大小写字符,及A - Z、a-z
[:blank:]代表空格键和【tab】按键
[:cntrl:]代表键盘上面的控制按键,包括CR、LF、TAB、DEL等
[:digit:]代表数字,即0 - 9
[:graph:]除了空格键和【Tab】键外的其他所有按键
[:lower:]代表小写字符,即a - z
[:print:]代表任何可以被打印出来的字符
[:punct:]代表标点符号,即:" ’ ? ! ; : # $
[:upper:]代表大写字符,即A - Z
[:space:]代表会产生空白的字符,包含空格键、【Tab】、CR等
[:xdigit:]代表十六进制的数字类型,因此包括0-9、a-z 、A-Z的数字与字符

案例3:行首与行尾字符 ^ 和 $

要求1:查找以字符串“the”开头的行

命令如下:

grep -n "^the" regular_express.txt

查找结果如图:
在这里插入图片描述
要求2:查找以小写字符开头的行

命令如下:

grep -n "^[a-z]" regular_express.txt

grep -n "^[[:lower:]]" regular_express.txt 

查找结果如图:
在这里插入图片描述
要求3:查找英文字符开头的行

命令如下:

grep "^[^a-zA-Z]" regular_express.txt 

grep "^[^a-Z]" regular_express.txt 

查找结果如图:
在这里插入图片描述
注意:字符 ^ 在字符集符号(包括[ ])之内与之外是不同的:

  • 在 [ ] 之内:代表反向选择;
  • 在 [ ] 之外:代表定位还行首的意思。

要求4:查找以小数点 . 结尾的行

命令如下:

grep -n "\.$" regular_express.txt

查找结果如图:
在这里插入图片描述

要求5:查找空白行

命令如下:

grep -n "^$" regular_express.txt

查找结果如图:
在这里插入图片描述
要求6:在/etc/rsyslog.conf中查找不是空白行而且不是以“#”开头的行(相当于去掉空行和注释)
注意:第二次查找的条件一定要是以#开头的,而不是包含#的,因为有些注释会卸载代码的后面。

命令如下:

grep -n -v "^$" /etc/rsyslog.conf | grep -v "^#"

查找结果如图:结果是两个grep一起用,没办法去掉以#开头的行,知道的大佬麻烦解释一下谢谢。
在这里插入图片描述
可以结合其他工具取出cat /etc/rsyslog.conf | tr -s "\n" | grep -v "^#",在这里插入图片描述

案例4:任意一个字符 . 和重复字符 *

在bash中通配符 * 可以代表任意(0或多个)字符,但是正则表达式并不是通配符,两者之间是不相同的:

  • . (小数点):代表一定有一个任意字符的意思。
  • * (星号):代表重复前一个字符,0到无穷个的意思。

要求1:查询包含gxxd的行,x为任意字符

命令如下:

grep -n "g..d" regular_express.txt

查找结果如图:

在这里插入图片描述
要求2:查询至少包含两个“o”的行 和 gxxg之间至少又两个“o”的行

命令如下:

grep -n "ooo*" regular_express.txt 				#查询至少包含两个“o”
grep -n "goo*g" regular_express.txt				#gxxg之间至少又两个“o”

查找结果如图:
在这里插入图片描述
在这里插入图片描述
要求3:查询g开始到g结束,中间的字符可有可无

命令如下:

grep -n "g.*g" regular_express.txt

查找结果如图:
在这里插入图片描述

案例5:限定连续RE字符范围{}

由于{ } 的符号在shell中是有特殊意义的,因此,我们必须要使用转义字符 \ 来将花括号转成普通的符号。

要求1:查找两个“o”的字符串
命令如下:

grep -n "o\{2\}" regular_express.txt

查找结果如图:
在这里插入图片描述
要求2:查找g开始后面“o”的数量为2到5个,然后以g结束的字符串
命令如下:

grep -n "go\{2,5\}g" regular_express.txt

查找结果如图:
在这里插入图片描述
要求3:查找g开始后面“o”的数量为2个,然后以g结束的字符串
命令如下:

grep -n "go\{2,\}g" regular_express.txt

查找结果如图:
在这里插入图片描述

3.RE特殊字符总结(基础正则表达式字符集合)

正则表达式的特殊符号有很多,具体可以参考我整理的此篇博客:正则表达式详解

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码海小虾米_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值