在awk中使用Perl正则表达式属性

cap*_*ser 1 regex perl awk

我喜欢在GNU中使用Perl regex引擎grep

$ echo FOO | grep -P '(?i)foo'
FOO
Run Code Online (Sandbox Code Playgroud)

我使用它多次,效果很好。

有时我使用awk它是因为我认为它比bash shell具有更好的正则表达式处理-但是其中的正则表达式awk与Perl不同。

我使用awkgawk并且找到了不同的regex修饰符awk。在旅行中,我发现了awk/的3种不同的正则表达式修饰符gawk

--posix
--traditional
--re-interval
Run Code Online (Sandbox Code Playgroud)

您是否知道awkgrep上面的示例那样使用Perl regex的物种?

Ed *_*ton 6

不,awk不支持Perl RE。awk语言的主要宗旨之一是通过不提供一些简单地做简单事情的结构来保持语言的小巧。这就是他们避免perl遭受的语言膨胀和相关复杂性的方式(有关对perl可读性的普遍理解,请参见http://www.zoitz.com/archives/13)。在这种情况下,虽然某些Perl RE语法使您可以做一些简短的事情,但您不需要特殊的语言构造来完成它们,因为还有其他方法可以对现有构造进行任何所需的操作(也许不在一个RE中或使用一个功能,因此不那么简短),因此awk不支持它们。