我有一个文件应该有“好的”在某一行的末尾
应该修改的行是第一行不以“好的”
我可以使用以下代码来 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; }
打印出以OK
as 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
是输入文件名的名称。