shell脚本_ grep和egrep命令

grep是一个文本搜索工具,用于根据用户指定的正则表达式过滤文件内容。文章通过示例展示了如何使用grep搜索特定文本,如1a,以及如何利用正则表达式[0-9]匹配数字。grep的-o选项用于只显示匹配内容而非整行。此外,文章还解释了grep和egrep的区别,以及grep命令的退出状态码与匹配情况的关系:0表示匹配,1表示未匹配。在脚本中,grep的退出状态码常用于控制流程,只有匹配时才会执行then中的命令。
摘要由CSDN通过智能技术生成

grep 全称(Global search regular expression and Print out the line)
作用:文本搜索工具,根据用户指定的文本模式(正则表达元字符以及正常字符组合而成)对目标文件进行逐行搜索,显示能匹配到的行。
模式:由正则表达式的元字符及文本字符所编写的过滤条件。
编写测试文件test.txt内容如下:
[root@localhost shell_test]# cat test.txt
hello world
1a2f3 yui
456 haha
nihao
thinks

1. grep和文本字符编写的过滤条件
#搜索test.txt文件中含有1a字符的行,并打印输出此行全部内容
[root@localhost shell_test]# grep "1a" ./test.txt
1a2f3 yui

[root@localhost shell_test]# cat test.txt | grep "1a"
1a2f3 yui

#只想展示匹配到的内容可以在grep 后加-o,不展示 全行内容
[root@localhost shell_test]# cat test.txt | grep -o "1a"
1a

2.grep和正则表达式编写的过滤条件
root@localhost shell_test]# cat test.txt | grep "[0-9]"
1a2f3 yui
456 haha

#是不是很奇怪,下面的命令,把匹配到的每个字符单独一行展示出来
#因为我们使用了-o模式 不在以行展示匹配到的内容,又因为正则表达式[0-9]表示 匹配0到9内的任意字符
#一旦匹配到一个字符就打印它,并换行继续匹配打印
[root@localhost shell_test]# cat test.txt | grep -o "[0-9]"
1
2
3
4
5
6

#下面使用egrep命令来实现,打印到一行中
#这里先来说明下grep和egrep的区别,grep在不加 -E的情况下,
#不支持扩展正则表达式,仅支持基本正则表达式,
#而egrep支持扩展表达式。e表示的就是extend,扩展的意思。
像{m,n},+等是扩展的表达式。
这里的grep -E 和 egrep 命令是等价的。因为正则表达式中含有扩展的表达式+
#这里的[0-9]+表示 会把同一行内匹配到连续出现的1到多个字符打印到一行内。
[root@localhost shell_test]# cat test.txt | grep -E -o "[0-9]+"
1
2
3
456

[root@localhost shell_test]# cat test.txt | egrep -o "[0-9]+"
1
2
3
456

也等价于下面的命令
[root@localhost shell_test]# cat test.txt | grep -E -o "[0-9]{1,}"
1
2
3
456

[root@localhost shell_test]# cat test.txt | egrep -o "[0-9]{1,}"
1
2
3
456

在这里再补充说下:grep命令退出状态码:

先说结论: 退出状态码为  0表示匹配到1表示没有匹配到 。所以这里的grep命令不是执行成功就返回0了。而是和是否匹配到过滤的条件也有关系。
使用echo $? 查看命令执行后的退出状态码。

举例说明:

创一个test.txt文件

[root@localhost sh_script]# cat test.txt
hello
world
you
operator

通过grep命令来过滤 指定字符串 看是否和test.txt文件匹配到,如果匹配到就输出打印匹配到的行内容。并通过$?来查看退出状态码。

#演示匹配到的情况,先执行cat命令,如果cat命令执行成功,再执行grep命令,最后的退出状态码 以最后一个命令为准。

[root@localhost sh_script]# cat test.txt | grep "you"   #这里加不加双引号都表示字符串,这里加上只是说明这里的内容是一起的。匹配时是忽略双引号的。
you

[root@localhost sh_script]# echo $?
0

#演示匹配不到的情况

[root@localhost sh_script]# cat test.txt | grep "ite"

[root@localhost sh_script]# echo $?
1

#这种是比较常见的,把待过滤的文件放在后面,效果和上面的一样

[root@localhost sh_script]# grep "you" ./test.txt 
you
[root@localhost sh_script]# echo $?
0

[root@localhost sh_script]# grep "ite" ./test.txt 
[root@localhost sh_script]# echo $?
1

从上面的命令演示中可以看到,当可以匹配到时,会有输出,退出状态码为0;当匹配不到时,不会有输出,退出状态码为:1。

这里再多提一嘴,在if-then语句中。如果if后的命令是grep命令,那么只有grep命令的退出状态码为0时,才能执行then里的命令。否则不会执行then里的命令。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值