我需要使用Unix并创建一个awk脚本。该脚本的第一部分是在文本文件中找到单词“Ant”“Ass”和“Ape”,并用相同的单词替换它们但是大写。
我是否使用gsub查找每次出现?如果我这样做:
{gsub(/Ass/, "ASS"); print}
{gsub(/Ape/, "APE"); print}
{gsub(/Ant/, 'ANT"); print}
它只打印文件的每一行3或4次...如何搜索和替换这三个单词,然后只打印出修改过的行?
该计划的第二部分是跟踪与Ass,Ape或Ant匹配的行数以及所做的替换次数。
感谢您的帮助!
答案 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