我想在sed模式之前插入一行: - 在“公共类”之前插入'XmlRootElement(name =“ABC”)'
这是剧本:
'/public class/i\@XmlRootElement(name="ABC")'
但是当我运行时出现错误:
sed -e script testfile.txt
sed: -e expression #1, char 13: Unterminated `s' command
任何人都可以帮助我吗?
由于
答案 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