たとえば、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
ロープの言葉に適しています。
答え1
echo 'duck " cat' | sed 's/"/quote/'
または で正規表現なので、awk
次のような一般的な形式で表示します。sub
//
echo 'duck " cat' | awk 'sub(/"/,"quote")'
答え2
文字列を使用するには、引用符で囲む必要があります。これは、アルファベット文字で構成される文字列(文字列/ロープの例のように)とメタ文字文字列(二重引用符など)にも当てはまります。つまり、sub (","quote")
機能しない理由は、sub (q,"quote")
機能しない理由と同じです。
文字列ターミネーター内に二重引用符があることを確認する必要があります。シェルは文字列終止符で一重引用符をすでにプログラムに渡しており、プログラムawk
でそれを使用するのが難しくなるため、これは少し難しくなります。この問題を回避する方法は2つあります。
- プログラムを
awk
文字列として渡すのではなく、ファイルに書き込んで(仮定)、そのsubstitution.awk
ファイルを指す引数をawk
使用して実行します(例:)。これにより、単一引用符が文字列終端文字として解放され、プログラムで使用できるようになります。-f
awk -f substition.awk
awk
シェルはすべてバックスラッシュ(\
)をエスケープ文字としてサポートします。これにより、awk
次の文字を一般的な方法として解釈することはできませんが、通常の文字として扱う必要があることをシェルに通知できます。つまり、次のいずれかを実行できます。awk 'sub(\'"\',"quote")'
またはこれ:
awk 'sub("\"","quote")'
最初の例では、シェルから2つの一重引用符をエスケープし、
awk
2番目の例では二重引用符をエスケープして二重引用符付きのawk
文字列を構成します。
答え3
echo 'a string with a " at some point' | awk -v dq=\" '{sub(dq,"quote")}1'
答え4
8進エスケープを使用できます。
awk 'sub("\42", "quote")' <<'eof'
a string with a " at some point
eof