在包含字符串的行之前追加

Append before line contains a string

我想使用 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

我想在 $file_name

中包含 $string1 的每一行上方放置 $string2
$ 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

sed 的命令多于 s///

sed '/LINE/ i NEWLINE'

对于与 LINE 匹配的任何行,incert 新文本。