将一个单词附加到txt文件中一行的末尾

将一个单词附加到txt文件中一行的末尾

我有一个文件应该有“好的”在某一行的末尾

应该修改的行是第一行不以“好的”

我可以使用以下代码来 grep 该文件以获取要修改的行

grep -vnm 1 OK '/content2'

我需要帮助将模式 OK 添加到此行的末尾

例子:

如果文件内容有以下几行

aaaaaaaaaaaaaa OK
bbbbbbbbbbbbbb OK  
cccccccccccccc  
dddddddddddddd
eeeeeeeeeeeeee OK

cccccccccccc我需要将 OK 添加到仅包含以下内容的行

答案1

您可以使用以下awk程序:

awk -v s=" OK" '/OK$/ { print; } !/OK$/ { print $0 s; s=""; }'

它的工作原理如下:

/OK$/ { print; }

打印出以OKas is 结尾的任何行,而

!/OK$/ { print $0 s; s=""; }

打印出任意行不是OK以附加的变量值结束s

变量s最初是字符串' OK'。在第一次遇到不以 结尾的行后,它将变为空字符串OK

更新

更简洁地说:

awk -v s=" OK" '!/OK$/ { print $0 s; s=""; } /OK$/'

消除{ print; }条件的操作/OK$/{ print; }作为默认操作。

更正

再看一下问题,它并没有说应该OK添加到没有的第一行OK,而是添加到没有的第一行,该OK行位于以下行之后有一个OK。因此,我们必须保留一个变量,c该变量标记至少OK已看到一行,以及一个变量d标记我们已完成:

awk ' /OK$/ { if (!d) c=1; } 
     !/OK$/ { if (c) d=1; } 
     c && d { s=" OK"; c=0; }
     { print $0 s; s=""; }'

答案2

sed '0,/[^O][^K]$/{s/[^O][^K]$/& OK/}' filename

其中filename是输入文件名的名称。

相关内容