Awk 审查文件

Awk 审查文件,awk,cycle,Awk,Cycle,我想使用awk修改文本文件。 修改后的文本文件应该转换以te或te开头的任何单词,并且在YYYY中不包含数字,以便对文件进行排序检查 例如,一个文件 各位好,, 今天是一个伟大的日子,在这里接受特尼特先生的考验! 不要告诉任何人! 应修改为 各位好,, 今天是YYYY先生在这里庆祝YYYY的好日子! 不要告诉任何人! 然后我想包括关于修改的信息——比如说文件有多少行,修改了多少行,需要使用for循环来完成吗 此信息应添加到文件末尾,如下所示: 该文件有3行,其中2行已修改。 我完全迷路了,希望能

我想使用awk修改文本文件。 修改后的文本文件应该转换以te或te开头的任何单词,并且在YYYY中不包含数字,以便对文件进行排序检查

例如,一个文件

各位好,, 今天是一个伟大的日子,在这里接受特尼特先生的考验! 不要告诉任何人! 应修改为

各位好,, 今天是YYYY先生在这里庆祝YYYY的好日子! 不要告诉任何人! 然后我想包括关于修改的信息——比如说文件有多少行,修改了多少行,需要使用for循环来完成吗

此信息应添加到文件末尾,如下所示:

该文件有3行,其中2行已修改。 我完全迷路了,希望能得到任何帮助。多谢各位

awk 'BEGIN{ IGNORECASE=1; m1=0; m2=0 }
     { x=gsub(/te[a-zA-Z]* /,"yyyyy ",$0); m1+=(x!=0); m2+=x; print }
     END{ print "The file has " NR " lines and " m1 " out of these were modified, with " m2 " changes"}' inputfile

如果您不需要输出更改后的文本,请从第二行删除“打印”

输出:

Hello everyone,
today is a great day to get yyyyy by mr. yyyyy here!
Don't te11 anyone!
The file has 3 lines and 1 out of these were modified, with 2 changes
编辑:因为对德黑兰的评论!我将输入文件更改为:

Hello everyone,
today is a great day, to get tested by mr. Tenet here!
time to light some external fire in Teheran!
Don't te11 anyone!
以及脚本:

awk 'BEGIN{ IGNORECASE=1; m1=0; m2=0 }
     { x=gsub(/\<te[[:alpha:]^[0-9][:punct:]]*/,"yyyyy ",$0); m1+=(x!=0); m2+=x; print }
     END{ print "The file has " NR " lines and " m1 " out of these were modified, with " m2 " changes"}' inputfile

这可能会有所帮助-正则表达式/te[[:alpha:][]*/也会影响内部带有te的单词,例如,它会将永恒之火变成eyyyyy之火。单词后加标点符号也会失败,例如德黑兰在哪里?将导致未更改的文本。我编辑了我的答案以使其更好地工作。谢谢你的意见!但是我看到我有很多关于正则表达式的知识要学。。。因为te11现在也更改为yyyy。将正则表达式从/\n更改为OK,如果te不必位于单词的开头,也可以位于单词的结尾?
awk 'BEGIN{ IGNORECASE=1; m1=0; m2=0 }
     { x=gsub(/\<te[[:alpha:]^[0-9][:punct:]]*/,"yyyyy ",$0); m1+=(x!=0); m2+=x; print }
     END{ print "The file has " NR " lines and " m1 " out of these were modified, with " m2 " changes"}' inputfile
Hello everyone,
today is a great day, to get yyyyy  by mr. yyyyy  here!
time to light some external fire in yyyyy
Don't te11 11 anyone!
The file has 4 lines and 3 out of these were modified, with 4 changes