0

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

我是否使用 gsub 来查找每个事件?如果我做:

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

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


该程序的第二部分是跟踪与 Ass、Ape 或 Ant 匹配的行数以及进行的替换次数。

谢谢你的帮助!

4

3 回答 3

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
于 2013-04-30T01:03:39.793 回答
0

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

{subs += gsub(/Ass/, "ASS"); subs += gsub(/Ape/, "APE"); subs += gsub(/Ant/, "ANT"); print; }
END { print "Total substitutions:", subs; }
于 2013-04-30T00:26:12.387 回答
0
sed 's/Ant/ANT/g; s/Ass/ASS/g; s/Ape/APE/'
于 2013-04-30T00:31:12.330 回答