如果行以关键字结尾,则在行前面附加字符串



>假设一个多行文本文件(file(和关键字bar .

> cat file
foo bar baz
foo bar quux
foo quux bar

关键字结尾的每一行都应以字符串Hello为前缀;没有关键字的每一行应按原样打印。

> cat file | sought_command
foo bar baz
foo bar quux
Hello foo quux bar

我相信这可以通过awk来完成(类似于awk '$ ~ /bar/ {print "Hello", $0}'(,但我无法提出正确的代码,并希望提出建议。

使用

Awk几乎走在正确的轨道上,只需使用正则表达式锚点$标记行尾,并根据需要附加字符串,

awk '$NF == "bar"{$0="Hello"FS$0}1' file

这将将字符串附加到最后具有关键字的行。

您可以使用

此awk命令:

awk '/bar$/{$0 = "Hello" FS $0} 1' file
foo bar baz
foo bar quux
Hello foo quux bar

这将检查一行是否以 bar 结尾,如果是,它将在该行前面加上字符串 "Hello "

如果行不以 bar 结尾,则该行将按原样打印。

使用 sed:

$ sed 's/.* bar$/Hello &/' infile
foo bar baz
foo bar quux
Hello foo quux bar

bar前面的空格确保不匹配以foobar结尾的行;对于包含bar的行,它不会中断,但是没有其他内容。

使用 awk,如果您只想匹配foo而不是foobar

$ awk '$NF == "bar" { $0 = "Hello " $0 }1' infile
foo bar baz
foo bar quux
Hello foo quux bar

最新更新