如果行以关键字结尾,则将字符串添加到行
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
假设一个多行文本文件 (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