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
サポートします。&