当将模式与/
其中匹配时,必须/
快速逃脱变得笨拙、丑陋:
/\/usr\/share\/man\//
对于 sed、perl 或 Vim,我会为正则表达式使用不同的分隔符,例如:
:
sed '\:/usr/share/man/: do something'
perl -ne 'print if m:/usr/share/man/:'
:g:/usr/share/man/: do something " Vim
我怎样才能避免这个awk?就像是:
awk ':/usr/share/man/: {do something}'
我能想到的最好的方法是使用变量:
awk -v pat='/usr/share/man/' '$0 ~ pat {do something}'
但与 sed/perl/vim 方法相比,这非常冗长。
当然,可能还有其他方法来匹配路径,例如/usr/share/man/
,但这并不是唯一/
可能出现在模式中的地方。
答案1
只需更改/testregexp/
为$0 ~ "testregexp"
简单的例子:
$ echo "a/b/c" | awk ' ( $0 ~ "a/b/c" ) { print "we have a winner" ; }'
we have a winner
另一个例子
regexp='some regexp "with /lots/ of double quotes" "everywhere"'
awk -v reg="${regexp}" ' ( $0 ~ reg ) { action here... }'
答案2
awk 本身没有任何简单、直接的解决方法。在一般情况下,切换到 Perl(或sed
针对简单任务切换到 Perl)是常见的解决方法。