如果行以关键字

时间:2017-05-09 18:35:47

标签: regex string awk prepend

假设多行文字文件(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

我相信这可以通过awkawk '$ ~ /bar/ {print "Hello", $0}'的某些内容)来完成,但是我无法提出正确的代码并希望得到建议。

3 个答案:

答案 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