我如何避免 awk 中的倾斜牙签综合症?

mur*_*uru 5 awk regular-expression

当与其中的模式匹配时/,必须/快速逃脱变得笨拙、丑陋:

/\/usr\/share\/man\//
Run Code Online (Sandbox Code Playgroud)

对于 sed、perl 或 Vim,我会为正则表达式使用不同的分隔符,例如:

sed '\:/usr/share/man/: do something'
perl -ne 'print if m:/usr/share/man/:'
:g:/usr/share/man/: do something " Vim
Run Code Online (Sandbox Code Playgroud)

我怎样才能避免这个 awk?就像是:

awk ':/usr/share/man/: {do something}'
Run Code Online (Sandbox Code Playgroud)

我能想到的最好的方法是使用一个变量:

awk -v pat='/usr/share/man/' '$0 ~ pat {do something}'
Run Code Online (Sandbox Code Playgroud)

但这与 sed/perl/vim 方法相比非常冗长。


当然,可能还有其他匹配路径的方法,例如/usr/share/man/,但这并不是/模式中可能出现的唯一地方。

tri*_*eee 0

awk 本身没有任何简单、直接的解决方法。在一般情况下,切换到 Perl(或针对sed简单任务切换到 Perl)是常见的解决方法。