假设多行文字文件(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}'
的某些内容)来完成,但是我无法提出正确的代码并希望得到建议。
答案 0 :(得分:2)
您使用Awk
在正确的轨道上几乎,只需使用正则表达式锚$
标记行的结尾,并根据需要附加字符串,
awk '$NF == "bar"{$0="Hello"FS$0}1' file
这会将字符串仅附加到最后一行中包含关键字的行。
答案 1 :(得分:1)
您可以使用此awk命令:
awk '/bar$/{$0 = "Hello" FS $0} 1' file
foo bar baz
foo bar quux
Hello foo quux bar
这将检查一行是否以bar
结尾,若是,那么它将在该行前加上字符串"Hello "
。
如果行没有以bar
结尾,则该行将按原样打印。
答案 2 :(得分:1)
使用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