AWK:字段分隔符包含'+'

时间:2009-11-07 15:19:30

标签: shell awk

echo -n 'a001~!+rr001~!+1~!+TEST DATA 1' | awk 'BEGIN {FS="~!+"} {print $2}'

我将字段分隔符设置为“〜!+”并想要打印第二个字段。 AWK打印一个无关的+,rr001为+ rr001。

我做错了什么?

3 个答案:

答案 0 :(得分:1)

您的问题是您的匹配条件'〜!+'是正则表达式。

从文档:“+ This symbol类似于'*',除了前面的表达式必须至少匹配一次。这意味着'wh + y'将匹配'why'和'whhy',但不是'wy',而'wh * y'会匹配这三个字符串。“

所以基本上你要求匹配〜!或〜!!等等所以你根本不匹配+。这就是你在输出中看到+的原因。您应该可以使用“~!\\+”来表达您的表达

答案 1 :(得分:1)

 $ echo -n 'a001~!+rr001~!+1~!+TEST DATA 1' | awk 'BEGIN {FS="~!\\+"} {print $2}' 
rr001 

双重逃避似乎也可以胜任。

答案 2 :(得分:0)

以另一种方式行事

$ echo 'a001~!+rr001~!+1~!+TEST DATA 1' | awk -F"+" '{gsub(/~!$/,"",$2);print $2}'
rr001

或者

$ echo  'a001~!+rr001~!+1~!+TEST DATA 1' | awk -F"[~][!][+]" '{print $2}'
rr001

$ echo  'a001~!+rr001~!+1~!+TEST DATA 1' | awk -F'~!\\+' '{print $2}'
rr001