Awk
如何在awk中替換“?
例如,我需要將 a改為in 中
"
的單詞quote
改變
a string with a " at some point
進入
a string with a quote at some point
我試過了:
$ echo 'a string with a " at some point' | awk 'sub(",quote)' awk: cmd. line:1: sub(",quote) awk: cmd. line:1: ^ unterminated string awk: cmd. line:1: sub(",quote) awk: cmd. line:1: ^ syntax error $ $ echo 'a string with a " at some point' | awk 'sub(\",quote)' awk: cmd. line:1: sub(\",quote) awk: cmd. line:1: ^ backslash not last character on line awk: cmd. line:1: sub(\",quote) awk: cmd. line:1: ^ syntax error
然而
$ echo 'a string with a " at some point' | awk 'sub("string","rope")' => a rope with a " at some point
適用於串繩詞。
echo 'duck " cat' | sed 's/"/quote/'
或者在 中
awk
,因為sub
採用正則表達式,所以用通常的//
形式將其標記為:echo 'duck " cat' | awk 'sub(/"/,"quote")'
如果你想使用一個字元串,你必須引用它。這適用於由字母字元組成的字元串(如您在字元串/繩索範例中所示),但也適用於元字元字元串,如雙引號。換句話說,
sub (","quote")
不起作用的原因與sub (q,"quote")
不起作用的原因相同。您需要確保雙引號在字元串終止符內。由於您已經在 shell 中使用單引號作為字元串終止符來將您的程序傳遞給
awk
,因此這會稍微困難一些,因此在您的程序中使用它變得更加困難。有兩種方法可以避免該問題:
- 與其將程序
awk
作為字元串傳遞給,不如將其寫入文件(假設我們稱它為substitution.awk
),然後使用參數執行awk
以將-f
其指向文件(即awk -f substition.awk
)。這將單引號釋放為字元串終止符,以便您可以在程序中使用它。- 兩者
awk
和您的 shell 都支持將反斜杠 (\
) 作為轉義字元。使用它,您可以告訴 shell 或者awk
它不能以通常的方式解釋下一個字元,而必須將其視為正常字元。換句話說,您可以執行以下任一操作:awk 'sub(\'"\',"quote")'
或這個:
awk 'sub("\"","quote")'
在第一個範例中,您從 shell 中轉義了兩個單引號,以便
awk
看到它們;在第二個中,您從 中轉義一個雙引號awk
,以便建構一個帶有雙引號的字元串。