在 awk 中使用 gsub 将单词替换为括号

在 awk 中使用 gsub 将单词替换为括号

您好,如何使用 gsub 替换带括号的单词。

这里我想用 ABC/G 替换 ABC(T)

awk ' {gsub("ABC\(T\)","ABC/G")}; Print $0' "$FILENAME" > tmp.tmp && mv tmp.tmp "$FILENAME"

答案1

//如果您使用以下格式,您可以简化整个事情gsub

$ echo "ABC(T)" | awk '{gsub(/ABC\(T\)/,"ABC/G")}; print $0'
ABC/G

然后,您可以通过使用print不带参数(与 相同print $0)或1打印简写(计算结果awk为 true 的表达式的默认操作,例如1;打印当前行)来进一步简化:

$ echo "ABC(T)" | awk '{gsub(/ABC\(T\)/,"ABC/G")}1'
ABC/G

然而,就我个人而言,我不会使用awk它,其他工具的语法更短、更清晰:

$ echo "ABC(T)" | sed 's|ABC(T)|ABC/G|'
ABC/G

$ echo "ABC(T)" | perl -pe 's|ABC\(T\)|ABC/G|'
ABC/G

答案2

你们非常亲密。你只需要两个\。这是因为其中一个集合是通过 BASH 的文本本身,另一个集合是\awk 正在解析的实际文本。这似乎对我有用:

echo 'ABC(T)' | awk ' {gsub("ABC\\(T\\)","ABC/G")}; Print $0' "$FILENAME"

并给出:

ABC/G

相关内容