Regex 不同工具的正则表达式语法之间有什么区别?

Regex 不同工具的正则表达式语法之间有什么区别?,regex,sed,awk,grep,gnu,Regex,Sed,Awk,Grep,Gnu,不同的工具实现正则表达式的方式不同。例如,要匹配“foo”或“bar”: printf“%s\n”foo bar baz food|grep-o'\' printf“%s\n”foo bar baz food | awk'/\/' printf“%s\n”foo bar baz food | sed-n'/\/p' printf“%s\n”foo bar baz food|sed-nr'/\/p' 这些差异记录在哪里?得分!我很高兴找到了这个页面: 14.8正则表达式语法 Gnulib支持许

不同的工具实现正则表达式的方式不同。例如,要匹配“foo”或“bar”:

printf“%s\n”foo bar baz food|grep-o'\'
printf“%s\n”foo bar baz food | awk'/\/'
printf“%s\n”foo bar baz food | sed-n'/\/p'
printf“%s\n”foo bar baz food|sed-nr'/\/p'

这些差异记录在哪里?

得分!我很高兴找到了这个页面:

14.8正则表达式语法 Gnulib支持许多不同类型的正则表达式;尽管底层功能相同或相同,但使用的语法不同。这里给出的不同类型的描述是自动生成的

  • awk正则表达式语法
  • egrep正则表达式语法
  • 非对称正则表达式语法
  • emacs正则表达式语法
  • gnu awk正则表达式语法
  • grep正则表达式语法
  • posix awk正则表达式语法
  • posix基本正则表达式语法
  • posix egrep正则表达式语法
  • posix扩展正则表达式语法
  • posix最小基本正则表达式语法
  • sed正则表达式语法

注意正则表达式部分的唯一区别是基本正则表达式(BRE)和扩展正则表达式(ERE)之间的区别,这可能也会有所帮助

布雷(+GNU)

此外,BRE示例使用GNU扩展:

\+

如果与这些实用程序的其他版本一起使用,这可能不起作用。

感谢您找到一个非常有用的参考+1为什么此页面不列出:
*
?它确实列出了
+
,但不列出表明正则表达式应该与前面的原子或regexp的零次或多次匹配的
*
printf "%s\n" foo bar baz food | grep '\<\(fo\+\|bar\)\>'
printf "%s\n" foo bar baz food | sed -n '/\<\(fo\+\|bar\)\>/p'
printf "%s\n" foo bar baz food | grep -E '\<(fo+|bar)\>'
printf "%s\n" foo bar baz food | sed -nr '/\<(fo+|bar)\>/p'
printf "%s\n" foo bar baz food | awk '/\<(fo+|bar)\>/'
\< ... \>
\+