如何用字符串替换最后一个匹配项

如何用字符串替换最后一个匹配项

给定一个正则表达式和一个替换字符串,我如何使用 awk 来实现以下内容:

  • 如果一行不包含任何匹配项,则不执行任何操作;
  • 如果一行包含多个匹配项,则用替换字符串替换最后一个匹配项,即最后一个匹配项将被gsub();替换
  • 如果一行仅包含一个匹配项,则用替换字符串替换该匹配项。

例如,参见gawk 中的“意外字符 '\'”

谢谢。

答案1

不使用gsub()但使用你的图案作为 FS 和 OFS 的字段分隔符,然后打印除最后两个字段之外的所有字段,且 OFS 完好无损; next 打印倒数第二个字段,后跟“替换字符串”然后是最后一个字段。

awk 'BEGIN{ FS=OFS="pat" }
      NF>1{ for(i=1; i<NF-1; i++) printf "%s", $i OFS;
            printf "%s\n", $i "REPLACEMENT-STRING" $NF; next
}1' infile

输入示例:

        pat 1 pat2 patt 3 pat 4
 pat
patt pat
pa t

输出:

        pat 1 pat2 patt 3 REPLACEMENT-STRING 4
 REPLACEMENT-STRING
patt REPLACEMENT-STRING
pa t

相关内容