echo -n 'a001~!+rr001~!+1~!+TEST DATA 1' | awk 'BEGIN {FS="~!+"} {print $2}'
我将字段分隔符设置为“〜!+”并想要打印第二个字段。 AWK打印一个无关的+,rr001为+ rr001。
我做错了什么?
答案 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