sed - 在模式前插入一行

时间:2011-11-16 02:28:41

标签: sed

我想在sed模式之前插入一行: - 在“公共类”之前插入'XmlRootElement(name =“ABC”)'

这是剧本:

'/public class/i\@XmlRootElement(name="ABC")'

但是当我运行时出现错误:

sed -e script testfile.txt
sed: -e expression #1, char 13: Unterminated `s' command

任何人都可以帮助我吗?

由于

2 个答案:

答案 0 :(得分:4)

对于我习惯的sed,你必须在i\之后加入换行符,并用空行“终止”插入,即

sed '/public class/i\
@XmlRootElement(name="ABC")

' file > outFile

请注意,新插入文字后的空白行。

注意,请确保在i\之后的行尾没有任何空格。

我现在意识到你将sed保存在一个单独的脚本文件中,格式约束也适用于那里,只需删除代码周围的''对。

更重要的是,您的脚本失败了,因为您使用-e作为sed脚本文件,请使用

sed -f script testfile.txt
如果您在线嵌入sed脚本,则会使用

-e,上面的我的第一个解决方案可以预先加上-e

修改修复了对a\到“i”的引用。 Doah

希望这会有所帮助。

答案 1 :(得分:2)

这可能对您有用:

# cat <<\! >/tmp/test.sed
> /^aaa/i\
> xxx
> /^bbb/a\
> yyy\
> zzz
> /^ccc/c\
> the end
> !
# echo -e "aaa\nbbb\nccc" | sed -f /tmp/test.sed 
xxx
aaa
bbb
yyy
zzz
the end

或从命令行:

# echo -e "aaa\nbbb\nccc" | sed -e '/^aaa/i\xxx' -e '/^bbb/a\yyy\nzzz' -e '/ccc/c\the end'
xxx
aaa
bbb
yyy
zzz
the end

一个非常有用的参考是here