echo -n 'a001~!+rr001~!+1~!+TEST DATA 1' | awk 'BEGIN {FS="~!+"} {print $2}'
我將字段分隔符設置爲「〜!+」並且想要打印第二個字段。 AWK用rr001打印一個+ rr001作爲+。AWK:字段分隔符包含'+'
我在做什麼錯?
echo -n 'a001~!+rr001~!+1~!+TEST DATA 1' | awk 'BEGIN {FS="~!+"} {print $2}'
我將字段分隔符設置爲「〜!+」並且想要打印第二個字段。 AWK用rr001打印一個+ rr001作爲+。AWK:字段分隔符包含'+'
我在做什麼錯?
$ echo -n 'a001~!+rr001~!+1~!+TEST DATA 1' | awk 'BEGIN {FS="~!\\+"} {print $2}' rr001
雙重逸出也似乎做的工作。
另一種辦法來做
$ 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
第一個建議的解決方案不是一個好主意 - 出於多種原因,第二個會起作用,但與修復正則表達式爲「〜!\ +」相比,這是一種矯枉過正的做法。使用'-F'比在BEGIN塊中設置FS更好,但是您應該使用單引號,而不是雙引號 - 特別是當它包含反斜槓時 – 2009-11-07 15:33:18
然後你可以顯示使用'〜!\ +'的代碼和結果嗎? – ghostdog74 2009-11-07 15:45:39
「首先提出的解決方案不是一個好主意」 - 同意! – Xolve 2009-11-07 16:51:47
您的問題是,你的匹配標準 '〜!+' 是一個正則表達式。
從文檔:「+ This symbol類似於'*',只是前面的表達式必須匹配至少一次,這意味着'wh + y'將匹配'why'和'whhy',但不匹配' wy',而'wh * y'會匹配所有這三個字符串。「
所以基本上你要求匹配〜!或〜!!等等。所以你根本不匹配+。這就是你在輸出中看到+的原因。您應該能夠使用「~!\\+
」讓你的表達工作
使用'-F'〜!\ +'';單引號是必要的(或者,如果你使用雙引號,寫'-F「〜!\\ +」'(但使用單引號更簡單)。 – 2009-11-07 15:34:52
這應該是答案 – Xolve 2009-11-07 16:47:04