Bash AWK检索令牌失败
我正在尝试使用awk获取代币。但是awk不适用于分隔符“(”。为什么会发生这种情况Bash AWK检索令牌失败,bash,awk,gawk,Bash,Awk,Gawk,我正在尝试使用awk获取代币。但是awk不适用于分隔符“(”。为什么会发生这种情况 echo "sad ads ( this should come" | awk -F"( " '{print $2}' awk: fatal: Unmatched ( or \(: /( / 但如果用“)”试试看,它是有效的 echo "sad ads ) this should come" | awk -F") " '{print $2}' this should come 这背后的原因是什么?gawk也给
echo "sad ads ( this should come" | awk -F"( " '{print $2}'
awk: fatal: Unmatched ( or \(: /( /
但如果用“)”试试看,它是有效的
echo "sad ads ) this should come" | awk -F") " '{print $2}'
this should come
这背后的原因是什么?gawk也给出了同样的结果。将特殊字符括在字符类中
echo "sad ads ( this should come" | awk -F"[(] " '{print $2}'
将特殊字符括在字符类中
echo "sad ads ( this should come" | awk -F"[(] " '{print $2}'
“这背后的原因是什么?”
请注意以下工作(始终使用GNU awk):
但以下情况并非如此:
$ echo "sad ads ( this should come" | awk -F'\( ' '{print $2}'
awk: warning: escape sequence `\(' treated as plain `('
awk: fatal: Unmatched ( or \(: /( /
awk
不将\(
识别为有效的转义序列,并用一个简单但不平衡的(
)代替它。它接受\\(
作为转义括号
解释说,Posix故意在常规字符前面出现反斜杠时不明确应该发生什么:
常规字符前的反斜杠
如果在字符串常量中,将反斜杠放在
先前列出的字符中没有一个是POSIX awk故意使用的
将发生的内容保留为未定义。有两种选择:
去掉反斜杠
这就是Brian Kernighan的awk和gawk所做的。例如,“a\qc”与“aqc”是相同的。(因为这是一个很容易找到的bug。)
介绍和错过,GAWK警告你。)考虑“FS=”。
\t] +\\\\;[\t]+“'使用由空格包围的竖条作为
字段分隔符。字符串中应该有两个反斜杠:“FS”=
“[\t]+\\\124;[\ t]+”)
不要用反斜杠
在其他一些awk实现中,键入“a\qc”与键入“a\qc”是相同的
(
不是常规字符,但显然,gawk按照前一种情况处理它
shell和awk的交互有一个单独的问题。请注意,下面的两个命令仅在使用单引号和双引号时有所不同:
$ echo "sad ads ( this should come" | awk -F'\\( ' '{print $2}'
this should come
$ echo "sad ads ( this should come" | awk -F"\\( " '{print $2}'
awk: warning: escape sequence `\(' treated as plain `('
awk: fatal: Unmatched ( or \(: /( /
shell将“\\”
视为一个反斜杠,但将“\\'
视为两个反斜杠
“这背后的原因是什么?”
请注意以下工作(始终使用GNU awk):
但以下情况并非如此:
$ echo "sad ads ( this should come" | awk -F'\( ' '{print $2}'
awk: warning: escape sequence `\(' treated as plain `('
awk: fatal: Unmatched ( or \(: /( /
awk
不将\(
识别为有效的转义序列,并用一个简单但不平衡的(
)代替它。它接受\\(
作为转义括号
解释说,Posix故意在常规字符前面出现反斜杠时不明确应该发生什么:
常规字符前的反斜杠
如果在字符串常量中,将反斜杠放在
先前列出的字符中没有一个是POSIX awk故意使用的
将发生的内容保留为未定义。有两种选择:
去掉反斜杠
这就是Brian Kernighan的awk和gawk所做的。例如,“a\qc”与“aqc”是相同的。(因为这是一个很容易找到的bug。)
介绍和错过,GAWK警告你。)考虑“FS=”。
\t] +\\\\;[\t]+“'使用由空格包围的竖条作为
字段分隔符。字符串中应该有两个反斜杠:“FS”=
“[\t]+\\\124;[\ t]+”)
不要用反斜杠
在其他一些awk实现中,键入“a\qc”与键入“a\qc”是相同的
(
不是常规字符,但显然,gawk按照前一种情况处理它
shell和awk的交互有一个单独的问题。请注意,下面的两个命令仅在使用单引号和双引号时有所不同:
$ echo "sad ads ( this should come" | awk -F'\\( ' '{print $2}'
this should come
$ echo "sad ads ( this should come" | awk -F"\\( " '{print $2}'
awk: warning: escape sequence `\(' treated as plain `('
awk: fatal: Unmatched ( or \(: /( /
shell将
“\\\”
视为一个反斜杠,但将“\\\”
视为两个反斜杠。谢谢,但分隔符是“(”and“。如果我尝试相同的方法,它会将“ads”作为输出。“echo”sad ads(应该是“;awk-F”[(]”{print$2}“ads
我认为您缺少空格。即使是FS
也会在多个分隔符上出现相同的错误。#echo”sad ads(这应该是“| awk-v FS=“”(“{print$2}”awk:fatal:不匹配(或\(:/Dinesh(//<代码> >在字符类之外放置一个空格,如果空间在里面,字符类将考虑<代码>(< /代码>或<代码>空间< /代码>。使用此:<代码>回声“悲伤广告”(这应该来)“GAWK-V FS=”[ [(] ] {打印2美元} } /代码>是的。它工作了。谢谢。但是,如果我使用“(),你能告诉我失败的原因吗?”但不是为了“)”@jaypal谢谢。但我的问题仍然存在!!它应该把)
和{
,}
也当作一个特殊字符。但不是。无论如何……谢谢你的回答。谢谢,但分隔符是“(和)”。如果我尝试同样的方法,它会给出“ads”作为输出。\echo“sad ads”(这应该会出现)|awk-F“[(]”“{print$2}”广告
我认为您缺少空格。即使是FS
也会在多个分隔符中出现相同的错误。"echo“sad ads(这应该是“{print$2}”awk:fatal:不匹配(或\(:/Dinesh(//<代码> >在字符类之外放置一个空格,如果空间在里面,字符类将考虑<代码>(< /代码>或<代码>空间< /代码>。使用此:<代码>回声“悲伤广告”(这应该来)“GAWK-V FS=”[ [(] ] {打印2美元} } /代码>是的。它工作了。谢谢。但是,如果我使用“(),你能告诉我失败的原因吗?”但不是因为“@jaypal谢谢。但我的问题仍然存在!!它应该把)
和{
,}
也当作一个特殊字符。但不是。无论如何..谢谢你的回答。