Awk

如何在awk中替換“?

  • January 15, 2017

例如,我需要將 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,因此這會稍微困難一些,因此在您的程序中使用它變得更加困難。有兩種方法可以避免該問題:

  1. 與其將程序awk作為字元串傳遞給,不如將其寫入文件(假設我們稱它為substitution.awk),然後使用參數執行awk以將-f其指向文件(即awk -f substition.awk)。這將單引號釋放為字元串終止符,以便您可以在程序中使用它。
  2. 兩者awk和您的 shell 都支持將反斜杠 ( \) 作為轉義字元。使用它,您可以告訴 shell 或者awk它不能以通常的方式解釋下一個字元,而必須將其視為正常字元。換句話說,您可以執行以下任一操作:
awk 'sub(\'"\',"quote")'

或這個:

awk 'sub("\"","quote")'

在第一個範例中,您從 shell 中轉義了兩個單引號,以便awk看到它們;在第二個中,您從 中轉義一個雙引號awk,以便建構一個帶有雙引號的字元串。

引用自:https://unix.stackexchange.com/questions/229251