查找“posix-extend”和“posix-egrep”之间的命令正则表达式差异

keg*_*pet 8 regex shell grep sh

标题确实说明了一切。谁能指出我在哪里可以找到 find 命令可用的不同正则表达式类型的描述。我可以找到它们的列表,但没有解释或比较。特别是,“posix-egrep”和“posix-extended”之间有什么区别,因为egrep是根据扩展集进行正则表达式匹配的工具?

Jas*_* Hu 12

让我通过向您展示我如何准确地定位信息来指导您如何使用 linux 的文档来自我回答此类问题。

  1. 我运行man find通过搜索关键字 来查看正则表达式类型的一些基本信息,regular然后我看到:

-regextype 类型

更改稍后在命令行上发生的 -regex 和 -iregex 测试所理解的正则表达式语法。要查看已知的正则表达式类型,请使用 -regextype help。Texinfo 文档(另请参阅)解释了各种类型正则表达式的含义和区别。

假设这就是您要查找的内容,文档说它位于 中Texinfo,所以我执行下一步;

  1. 跑步info find。然后搜索regextype找到它的正确部分。然后我到达:

'--正则表达式类型'

此选项更改“--regex”选项使用的正则表达式语法和行为。*note 正则表达式:: 有关 GNU findutils 理解的正则表达式方言的更多信息。

它要求参考名为note Regular Expressions 的进一步文档,当光标位于其上时,您可以通过按 Enter 键转到该文档。

  1. 万岁!
  • 菜单:

  • findutils-默认正则表达式语法::

  • awk 正则表达式语法::

  • egrep 正则表达式语法::

  • emacs 正则表达式语法::

  • gnu-awk 正则表达式语法::

  • grep 正则表达式语法::

  • posix-awk 正则表达式语法::

  • posix-基本正则表达式语法::

  • posix-egrep 正则表达式语法::

  • posix 扩展正则表达式语法::

最后两项正是您所要求的。阅读这两篇文章,您就会发现系统已经为您提供了正确的答案。


Mik*_*kel 8

根据信息文档,它们非常相似,但有以下区别:

posix-egrep

人物 '。' 匹配任何单个字符。

字符“*”、“+”和“?” 在正则表达式中的任何地方都是特殊的。

间隔由“{”和“}”指定。无效间隔被视为文字,例如 'a{1' 被视为 'a{1'

posix 扩展

人物 '。' 匹配除空字符之外的任何单个字符。

'*'、'+' 和 '?' 在正则表达式中的任何点都是特殊的,除了以下不允许的地方:

  1. 在正则表达式的开头
  2. 在开组之后,用“(”表示
  3. 在交替运算符“|”之后

间隔由“{”和“}”指定。不接受无效间隔,例如“a{1z”。