如果行以关键字结尾,则将字符串添加到行

Prepend string to line if line ends in keyword

假设一个多行文本文件 (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", [=16=]}' 的方法),但我无法想出正确的代码,希望得到建议。

您可以使用这个 awk 命令:

awk '/bar$/{[=10=] = "Hello" FS [=10=]} 1' file

foo bar baz
foo bar quux
Hello foo quux bar

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

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

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

awk '$NF == "bar"{[=10=]="Hello"FS[=10=]}1' file

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

使用 sed:

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

bar 之前的 space 确保不匹配以 foobar 结尾的行;但是,它会中断包含 bar 而没有其他内容的行。

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

$ awk '$NF == "bar" { [=11=] = "Hello " [=11=] }1' infile
foo bar baz
foo bar quux
Hello foo quux bar