我正在尝试在hyphen
的while循环中匹配hash sign
和awk
。我目前的设置是:
awk 'BEGIN { while ($1==# && $2==-) { #do stuff} }'
这显然会导致哈希符号出现语法错误。我已尝试以各种方式转义它,但这会导致语法错误,或“反斜杠不是最后一个字符在线”错误。
那么:我如何匹配hash sign
表达式中的hyphen
和awk
?
答案 0 :(得分:3)
while
中的BEGIN
可能不是您想要的,除非#do stuff
包含next
或其他声明以进入下一行输入。要回答您的具体问题,我假设您要检查每一行输入。我使用echo -e 'foo bar skip\n# - printme'
提供两行输入:foo bar skip
和# - printme
,我使用print $3
代替#do stuff
。
echo -e 'foo bar skip\n# - printme' | awk '($1=="#" && $2=="-") { print $3 }'
# ^ ^ ^ ^ double quotes
应该打印printme
。您也可以使用正则表达式执行此操作:
echo -e 'foo bar skip\n# - printme' | awk '($1~/^#$/ && $2~/^-$/) { print $3} '
# ^^ ^ ^^ ^ regex match
~
是正则表达式匹配运算符,//
分隔正则表达式。 修改 ^
和$
是正则表达式匹配整个字段,并且如果仅仅{em}包含$1
,则不会成功连字符。
在cygwin上的gawk 4.1.3上进行了测试。