如何在 awk 中匹配连字符 (-) 和井号 (#)?

How can I match a hyphen (-) and hash (#) sign in awk?

我试图在 awk 的 while 循环中匹配 hyphenhash sign。我当前的设置是:

awk 'BEGIN { while (==# && ==-) { #do stuff} }'

这显然会导致散列符号出现语法错误。我试过以各种方式转义它,但这要么导致语法错误,要么导致 "backslash not last character on line" 错误。

那么:如何在 awk 表达式中匹配 hash signhyphen

BEGIN 中的 while 可能不是您想要的,除非 #do stuff 包含 next 或其他语句以进入下一行输入.为了回答您的具体问题,我假设您想检查每一行输入。我正在使用 echo -e 'foo bar skip\n# - printme' 来提供两行输入:foo bar skip# - printme,并且我正在使用 print 代替 #do stuff

echo -e 'foo bar skip\n# - printme' | awk '(=="#" && =="-") { print  }'
                                              # ^ ^        ^ ^ double quotes

打印 printme,这是应该的。您也可以使用正则表达式来做到这一点:

 echo -e 'foo bar skip\n# - printme' | awk '(~/^#$/ && ~/^-$/) { print } '
                                             # ^^   ^      ^^   ^ regex match

~是正则表达式匹配运算符,//分隔正则表达式。 Edit ^$ 所以正则表达式匹配整个字段,如果 只是 包含一个连字符。

在 cygwin 上的 gawk 4.1.3 上测试。