使用:
$ awk --version
GNU Awk 3.1.7
我对正确使用包含/
在{ }
. awk
例如,这有效:
$ echo "4,testing" | awk -F, '/test/ {print $0}'
4,testing
使用if
andmatch
代替正斜杠正则表达式语法也可以使用(如果添加了额外的外部操作大括号):
$ echo "4,testing" | awk -F, '{if(match($0, "test")) {print $0}}'
4,testing
所以,我想,/REGEX/
应该相当于if(match($0, "test"))
,对吧?
无论如何,我想对每个字段进行一些测试 - 然后对整个字符串进行正则表达式检查......并match
在嵌套动作括号内if
按预期工作:
$ echo "4,testing" | awk -F, '{if($1==4) {if(match($0, "test")) {print $0}}}'
4,testing
...但是,如果我想if(match(...))
用正斜杠正则表达式替换,我得到:
$ echo "4,testing" | awk -F, '{if($1==4) {/test/ {print $0}}}'
awk: {if($1==4) {/test/ {print $0}}}
awk: ^ syntax error
谁能解释规则是什么,何时使用正斜杠正则表达式 - 以及何时使用match()
正则表达式?
在写这篇文章时,我偶然发现这是可行的:
$ echo "4,testing" | awk -F, '{if($1==4) {if(/test/) {print $0}}}'
4,testing
...所以看起来:在一个动作中,正斜杠正则表达式必须在if
语句的参数中......但这对我来说仍然没有意义 - 鉴于在上面的第一个示例中,正则表达式不是(至少,对我来说不是很明显)位于if()
争论中?