在行包含字符串之前追加

时间:2015-04-21 22:53:24

标签: regex bash sed append

我想使用sed。

在部分匹配字符串的所有实例之前附加一个字符串

换句话说就像

LINE ONE OF FILE
LINE TWO OF FILE

我想在包含LINE

的每一行之前添加NEWLINE

所以它看起来像这样

NEWLINE
LINE ONE OF FILE
NEWLINE
LINE TWO OF FILE

我有:

sed 's/.*$string1.*/$string2\n&/' $file_name

我想将$string2放在$string1

中包含$file_name的每一行的上方

2 个答案:

答案 0 :(得分:1)

$ string1=LINE
$ string2=NEWLINE
$ sed "s/.*$string1/$string2\n&/" file
NEWLINE
LINE ONE OF FILE
NEWLINE
LINE TWO OF FILE

您必须小心检查string1string2,以确保它们不会无意中包含任何未转义的sed-active字符。

处理/

如果字符串包含/,我们需要更改替换命令的形式。例如:

$ string1=LINE
$ string2=NEW/LINE
$ sed "s|.*$string1|$string2\n&|" file
NEW/LINE
LINE ONE OF FILE
NEW/LINE
LINE TWO OF FILE

答案 1 :(得分:1)

sed拥有的命令多于s///

sed '/LINE/ i NEWLINE'

对于任何匹配LINE的行,i插入新文本。