我有一个如下所示的文件
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