如下:
echo "private public () " | awk 'BEGIN{kw="private"}{for (i=1;i<=NF;i++)if (kw~$i) print $i}'
我收到错误:
awk: run time error: regular expression compile failed (missing operand)
()
这是由输入流中的括号引起的。我怎么能让awk知道它不应该解释输入流中的括号?
谢谢
答案 0 :(得分:2)
这听起来像是在问你&#34;我怎么得到awk不把我的字符串视为正则表达式&#34;并且答案总是 - 不要编写使用你的字符串作为正则表达式的代码。只需将~
更改为==
,即可进行字符串比较而不是正则表达式比较。
如果您不是全部,那么请编辑您的问题以澄清您的要求,并提供更具真实代表性的样本输入/输出。
答案 1 :(得分:0)
我认为我得到了正确的方法: if(kw~ $ i) 我想检查一下术语($ i)是keywork(kw)列表的成员 谢谢你的回复:
我想出的解决方案是前缀: sed's / [()] / \&amp; / g' 这会转义括号,以便正则表达式解释器将它们单独留下,所以我有:
echo“private public()”| sed's / [()] / \&amp; / g'| awk'BEGIN {kw =“private”} {for(i = 1; i&lt; = NF; i ++)if if(kw~ $ i)print $ i}'
这很有效,但我正在寻找更优雅的东西。