>假设一个多行文本文件(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