awkで一致するテキストの逆参照

awkで一致するテキストの逆参照

awk(GNU Awk 4.2.0)inputでは、{with \{[with \[|withなどの一部の文字をエスケープする必要があります\|。私は3つの呼び出しでgsubこれを達成しました。

for (i = 2; i <= NF; i++) {
    gsub(/{/, "\\{", $i)
    gsub(/\[/, "\\[", $i)
    gsub(/\|/, "\\|", $i)
}

これら3つの呼び出しを1つにまとめるにはどうすればよいですか?それはまるで

gsub(/([{[|])/, "\\\1", $i)

ベストアンサー1

あなた&一致するテキストを参照するために置換に使用できます。:

$ awk '{gsub(/[[{|]/, "\\\\&", $0); print}' <<<"abc { | [ def"
abc \{ \| \[ def

これは[...]パターンに[、およびを含む一般的な文字クラス|であり、完全にエスケープされたバックスラッシュと置換が続きます。あなたは本当にそれらのすべてが必要です。{&


より複雑なパターンの場合gawkにはgensub機能がありますたとえば、テキストの一部を引用できますが、\\1ここでは必要ありません。すべてのPOSIX規則は、代替項目に一致する完全な部分文字列を含む動作をawkサポートします。&

おすすめ記事