查找特定单词并替换为大写字母

时间:2013-04-30 00:21:22

标签: regex unix awk gsub

我需要使用Unix并创建一个awk脚本。该脚本的第一部分是在文本文件中找到单词“Ant”“Ass”和“Ape”,并用相同的单词替换它们但是大写。

我是否使用gsub查找每次出现?如果我这样做:

{gsub(/Ass/, "ASS"); print}
{gsub(/Ape/, "APE"); print}
{gsub(/Ant/, 'ANT"); print} 

它只打印文件的每一行3或4次...如何搜索和替换这三个单词,然后只打印出修改过的行?


该计划的第二部分是跟踪与Ass,Ape或Ant匹配的行数以及所做的替换次数。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

在单个子句中进行所有替换:

{subs += gsub(/Ass/, "ASS"); subs += gsub(/Ape/, "APE"); subs += gsub(/Ant/, "ANT"); print; }
END { print "Total substitutions:", subs; }

答案 1 :(得分:0)

另一种方式:

awk  '
  BEGIN {IGNORECASE=1}
  { 
      s = 0
      while (match(substr($0, s),/ass|ape|ant/) > 0) {
          c=substr($0,s + RSTART - 1,RLENGTH)
          sub(c,toupper(c))
          s += RSTART + RLENGTH
      }
     print
   }' input