awk 正则表达式用“”替换任何数字,但对于括号之间的数字则不然

awk 正则表达式用“”替换任何数字,但对于括号之间的数字则不然
  • 输入显示:(TJ)-8.5(o12)-3.2(p1)-15.3(ik)-1.2(1)

  • 结果必须是:(TJ)-.(o12)-.(p1)-.(ik)-.(1)

  • 括号中包含的任意位数的数字不应被替换,但所有其他任意位数的数字都可以。

答案1

使用 GNU awk

gawk '{print gensub(/(\([^)]*\))|[0123456789]+/, "\\1", "g")}'

基本上翻译为sed

sed -E 's/(\([^)]*\))|[0123456789]+/\1/g'

答案2

使用用于多字符 RS 的 GNU awk:

$ echo '(TJ)-8.5(o12)-3.2(p1)-15.3(ik)-1.2(1)' |
    awk -v RS='[(][^)]+)' '{gsub(/[0-9]/,""); printf "%s%s", $0, RT}'
(TJ)-.(o12)-.(p1)-.(ik)-.(1)

相关内容