Linux 正则表达式

文章详细介绍了Linux中的grep命令,包括如何使用grep查找和匹配字符串,讲解了单引号和双引号的使用规则,以及正则表达式中的特殊字符和选项,如-E、-i、-v等。此外,还提到了正则表达式的元字符和边界匹配,提供了多个使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux grep 命令详解 (正则表达式)

主要内容

  • 查找
  • 取出
  • 匹配

查找、取出、匹配复符合条件的摸个字符或字符串

体验
sudo grep 'nameserver' /var/log/syslog

正则表达式单字符

  • 特定字符
  • 范围内字符
  • 任意字符
某个具体字符
grep root /etc/passwd
grep lhz /etc/passwd
grep nginx /etc/passwd
grep 'usr' centos8编译安装nginx.txt
单引号和双引号

单引号:可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么。单引号’'是全引用,被单引号括起的内容不管是常量还是变量者不会发生替换。

双引号:把双引号内的内容输出出来;如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来。双引号""是部分引用,被双引号括起的内容常量还是常量,变量则会发生替换,替换成变量内容。

不加引号:不会将含有空格的字符串视为一个整体输出, 如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续的字符串,数字,路径等可以用。

使用规则:一般常量用单引号’'括起,如果含有变量则用双引号""括起。

最大不同:单引号与双引号的最大不同在于双引号仍然可以保有变数的内容,但单引号内仅能是一般字元,而不会有特殊符号

使用举例:
"“号里面遇到KaTeX parse error: Undefined control sequence: \等 at position 2: ,\̲等̲特殊字符会进行相应的变量替换 …a” file #引用变量a,查找变量a的值
grep 'KaTeX parse error: Expected 'EOF', got '#' at position 17: …' file #̲查找“a”字符串
grep “\” file #grep: Trailing backslash(不知原因)
grep ‘\’ file #查找‘\’字符

1、$ 美元符
2、\ 反斜杠
3、` 反引号
4、" 双引号
这四个字符在双引号中是具有特殊含义的,其他都没有,而单引号使所有字符都失去特殊含义
如果用双引号,查找一个\,就应该用四个:
grep “\\” file 这样就对了,这样等同于:
grep ‘\’ file
第一条命令shell把四个,转义成2个\传递给grep,grep再把2个\转义成一个\查找
第二条命令shell没转义,直接把2个\传递给grep,grep再把2个\转义成一个\查找
其实grep执行的是相同的命令
还有一种情况是查找的内容含有单引号,也含有变量如HOME,如文件:"HOME,如文件: "HOME,如文件:"HOME’
这时候 grep ‘"$HOME’‘的话,因为内容有单引号,第一个单引号会和倒数第二个单引号匹配,导致找不到正确内容,这里只能用双引号(如有单引号方法可以留言讨论),即grep “”$HOME’"。
结论:当grep的字符串中有单引号时,需要使用双引号,以防止单引号匹配错误。但这也会导致不想转换的变量被双引号转换,只能用\转义。

常用选项
-E :开启扩展(Extend)的正则表达式,相当于egrep
-e:同时匹配多个目标
-i :忽略大小写(ignore case)
-v:反向查找(invert),只打印没有匹配的,而匹配的反而不打印。
-n:显示行号
-i:忽略大小写
-c:显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。
-P:使用兼容perl的正则
-w:被匹配的文本只能是单词,而不能是单词中的某一部分,也就是精确匹配。如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker
fgrep: 不支持正则表达式,只能匹配写死的字符串,但是速度奇快,效率高,fastgrep
-o:只显示被模式匹配到的字符串。
-q:静默模式,只关心有没有匹配到,不关心内容
--color :将匹配到的内容以颜色高亮显示,centos7默认已经高亮。
-A n:显示匹配到的字符串所在的行及其后n行,after
-B n:显示匹配到的字符串所在的行及其前n行,before
-C n:显示匹配到的字符串所在的行及其前后各n行,context
去除空行;去除注释行;去除空行和注释行
grep -v '^$' abc.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李昊哲小课

桃李不言下自成蹊

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

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

打赏作者

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

抵扣说明:

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

余额充值