需要在远程 SSH 的文件末尾的特定行中插入单词



我有一个如下所示的文件

cat test -(X- different words )
XXXXXXXXXXXXXXXXXXX
always-a-constant:::pete
XXXXXXXXXXXXXXXXX

我需要在皮特旁边添加史蒂夫并生成一个新文件,输出应如下所示。

XXXXXXXXXXXXXXXXXXX
always-a-constant:::pete,steve
XXXXXXXXXXXXXXXXX

我可以使用awk

cat  test | grep -i alw|  awk '{print $0",steve"}' 
always-a-constant:::pete,steve

但我仍然需要其他行 XXX .

方法 1: sed

以此作为我们的测试文件:

$ cat test
XXXXXXXXXXXXXXXXXXX
always-a-constant:::pete
XXXXXXXXXXXXXXXXX

我们可以在任何以alw开头的行之后添加,steve

$ sed '/^alw/ s/$/,steve/' test
XXXXXXXXXXXXXXXXXXX
always-a-constant:::pete,steve
XXXXXXXXXXXXXXXXX

在 sed 的正则表达式中,$在行尾匹配。 因此,s/$/,steve/在行尾添加,steve

方法2:awk

$ awk '/^alw/ {$0=$0",steve"} 1' test
XXXXXXXXXXXXXXXXXXX
always-a-constant:::pete,steve
XXXXXXXXXXXXXXXXX

在 awk 中,$0表示当前行。$0",steve"表示当前行,后跟字符串.steve。 因此,$0=$0",steve"将当前行替换为当前行,后跟,steve

awk 命令中的最后一个1很重要:它是 awk 的行打印简写。任何非零数字都可以。更详细地说,awk 将1视为条件(布尔值)。由于它的计算结果为 true(非零),因此将执行该操作。由于我们实际上没有指定操作,awk 执行默认操作,即打印行。因此,1 是行打印的简写。

方法3:sed

或者,我们可以在任何以:::pete结尾的行之后添加,steve

$ sed 's/:::pete/&,steve/' test
XXXXXXXXXXXXXXXXXXX
always-a-constant:::pete,steve
XXXXXXXXXXXXXXXXX

最新更新