需要在来自远程 ssh 的文件末尾的特定行插入一个单词

need to insert a word to a specific line at the end in a file from a remote ssh

我有一个像下面这样的文件

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

我需要在 pete 旁边添加 steve 并生成一个新文件,输出应如下所示。

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

我会用awk

cat  test | grep -i alw|  awk '{print [=12=]",steve"}' 
always-a-constant:::pete,steve

但我还需要其他线路 XXX。

方法一: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 on。

方法二:awk

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

在awk中,[=19=]表示当前行。 [=20=]",steve" 表示当前行后跟字符串 .steve。因此,[=22=]=[=22=]",steve" 将当前行替换为当前行后跟 ,steve.

awk 命令中最后的 1 很重要:它是 awk 的 shorthand for print-the-line。任何 non-zero 号码都可以。更详细地说,awk 将 1 视为条件(布尔值)。因为它的计算结果为真(非零),所以执行操作。因为我们实际上并没有指定一个动作,awk 执行默认的动作,即打印该行。因此,对于 print-the-line.

,1 是 shorthand

方法三:sed

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

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