首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解逃逸

理解逃逸
EN

Unix & Linux用户
提问于 2017-07-10 14:56:38
回答 1查看 535关注 0票数 0

我的问题来源是这个链接的答案,加上一些额外的东西

更新

我理解第一个命令,即grep \\[[a-z\|1-9]*\\] file,但不理解第二个命令的输出,即grep \[[a-z\|1-9]*\] file.

现在,我只想了解第二个命令的输出是如何构造的,特别是为什么grep完全选择了整个第三行和第四行,而只选择了第二行和第三行,直到第一个]

EN

回答 1

Unix & Linux用户

发布于 2017-07-10 18:49:24

这里有太多的变量和未声明的假设,无法详尽地回答你的问题。

这里的主要陷阱是,defaut的外壳(即大多数与Bourne兼容的shell --实际上不确定zsh或csh和导数)将通过未扩展的glob,如果它与任何东西不匹配。因此,像\\[[a-z0-9]*\\]这样的表达式首先尝试作为通配符。如果没有匹配的文件(如\fno[rd\],其中的非字母都是文字的),则通配符将逐字传递给grep

(让我们再检查一遍。这是一个双反斜杠,即引文反斜杠,后面是两个开头方括号。第一个创建一个字符类,其第一个字符是第二个文字[。将此解析为正则表达式的结果不同,但类似地复杂。)

对此唯一合理的解决方案是正确引用不需要由shell进行空格标记化和通配符扩展的任何内容。我的建议是在所有正则表达式周围使用单引号。然后,您将能够形成一个合理的预期,什么将匹配和如何,没有两个专家解释(一个外壳,一个正则表达式)您的模式。

如果您想要与var[1]完全匹配,那么像[a-z]*\[[0-9]*\]这样的正则表达式就会这样做。如果希望方括号成为字符类的一部分,请尝试[][a-z0-9]*,其中第一个]和第二个[是字符类的文字成员。如果你把单引号传递给shell中的grep,记住它们周围的单引号。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/377492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档