我需要从我的 awk(GNU Awk 4.2.0)输入中转义一些字符 - {with \{、[with\[和|with \|。我通过三个gsub调用实现了这一点:
for (i = 2; i <= NF; i++) {
gsub(/{/, "\\{", $i)
gsub(/\[/, "\\[", $i)
gsub(/\|/, "\\|", $i)
}
Run Code Online (Sandbox Code Playgroud)
如何将这三个调用合二为一?就像是
gsub(/([{[|])/, "\\\1", $i)
Run Code Online (Sandbox Code Playgroud)
$ awk '{gsub(/[[{|]/, "\\\\&", $0); print}' <<<"abc { | [ def"
abc \{ \| \[ def
Run Code Online (Sandbox Code Playgroud)
这只是一个普通的[...]字符类[,|以及{在它的格局,并充分转义反斜线后跟&的更换。你确实需要所有这些。
对于更复杂的模式,gawk 有一个gensub功能可以让您引用部分文本,例如\\1,但这里不需要。所有 POSIX 兼容的awks 都支持&在替换中包含整个匹配的子字符串的行为。