2013-07-16 61 views
0

如果我想更換一個字符型字段,說{,使用awk我可以使用:awk中查找和替換完全匹配僅

awk '{ gsub(/{/, "<"); print }' file 

...但是這也將取代場如「{」(我不想)。是否有awk函數只能找到完全匹配(並替換)整個字段;適用於所有領域。

例如,以下內容:

$ echo "foo bar zod \"{\" {" | awk '{ gsub(/{/, "<"); print }' 

將輸出:

foo bar zod "<" < 

但我想它想的輸出:

foo bar zod "{" < 

我也可以明確地在迭代字段和使用==來檢查完全匹配,但我想知道是否這是另一種選擇。

+3

請粘貼示例輸入和預期輸出 – Kent

+0

@Kent:現在已添加到問題中。 – user2023370

回答

3

我會盡你所說,通過所有字段循環,檢查與==/^{$/

但是,如果我們玩一些把戲,也可能是不循環中完成:(GNU AWK)

awk '$0=gensub(/(\s|^){(\s|$)/, "\\1<\\2","g")'                     

檢查這個例子:

kent$ echo '{ foo "{" and this: { bar {'|awk '$0=gensub(/(\s|^){(\s|$)/, "\\1<\\2","g")' 
< foo "{" and this: < bar < 

在上面的例子中,4 { 3人取代。

+0

不錯,^和$分別匹配一個字符串的開始和結束;因爲當所尋找的角色不在空格之前或之後時。 {在gensub的第一個參數中不對應於\\ 2,因爲它不在括號內。 – user2023370