如何在 awk 中匹配连字符 (-) 和井号 (#)?
How can I match a hyphen (-) and hash (#) sign in awk?
我试图在 awk
的 while 循环中匹配 hyphen
和 hash sign
。我当前的设置是:
awk 'BEGIN { while (==# && ==-) { #do stuff} }'
这显然会导致散列符号出现语法错误。我试过以各种方式转义它,但这要么导致语法错误,要么导致 "backslash not last character on line" 错误。
那么:如何在 awk
表达式中匹配 hash sign
和 hyphen
?
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 上测试。
我试图在 awk
的 while 循环中匹配 hyphen
和 hash sign
。我当前的设置是:
awk 'BEGIN { while (==# && ==-) { #do stuff} }'
这显然会导致散列符号出现语法错误。我试过以各种方式转义它,但这要么导致语法错误,要么导致 "backslash not last character on line" 错误。
那么:如何在 awk
表达式中匹配 hash sign
和 hyphen
?
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 上测试。