当前位置:  开发笔记 > 运维 > 正文

在egrep中使用"[]"获得奇特的结果,但在Linux中使用"\"(转义序列)

如何解决《在egrep中使用"[]"获得奇特的结果,但在Linux中使用"\"(转义序列)》经验,为你挑选了1个好方法。

最近我在使用正则表达式做家务时遇到了以下情况.

s@ubuntu:~$ echo b | egrep []b]
b
s@ubuntu:~$ echo b | egrep [[b]
b
s@ubuntu:~$ echo b | egrep []b[]
b
s@ubuntu:~$ echo b | egrep [b[]
b
s@ubuntu:~$ echo b | egrep [[b]]
s@ubuntu:~$ echo b | egrep [b]]
s@ubuntu:~$ echo b | egrep [b\]]
s@ubuntu:~$ echo b | egrep [b\\]]
s@ubuntu:~$ echo b | egrep [\[b\]]

为什么我在最后5个案例中没有打印'b'?



1> Jonathan Lef..:

egrep [[b]]- 寻找a b[后跟a ]; 未找到.

egrep [b]]- 寻找a b后跟a ]; 未找到.

egrep [b\]]- 寻找a b后跟a ]; 未找到.shell省略了反斜杠,但没有看到egrep.

egrep [b\\]]- 查找b后面跟着的反斜杠]; 未找到.

egrep [\[b\]]- 寻找a b或a [后跟]; 未找到.shell省略了反斜杠,但没有看到egrep.

在一个字符类(由...开头[)中,第一个]终止该类,除非它]是在第一个字符之后[,或者在[^一个否定字符类之后的第一个字符.请注意,这]不是正则表达式元字符,除非前面[的字符串使其成为字符类的末尾.您还发现它$不是字符串中间的元字符,也不是^它出现在开头,也不*+也不?是它们首先出现等.请参阅POSIX 正则表达式进行详细讨论 - 由egrep(现在grep -E)处理的正则表达式是'扩展正则表达式'.

egrep获得有机会看到它们之前,外壳会用反斜杠混乱.你应该用单引号括起你的正则表达式,以避免shell改变egrep看到的内容.

您可以通过更改回显的内容来演示我的分析:

echo '[b]' | egrep [[b]]
echo '[b]' | egrep [b]]
echo '[b]' | egrep [b\]]
echo '[b]' | egrep [b\\]]
echo '[b]' | egrep [\[b\]]

那个输出是:

[b]
[b]
[b]
[b]
[b]

[这些实施例中(在回送数据)的存在出于美容的原因; 它可以省略,并且可以接受这些行.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有