我在文件中有一行,想在下面添加。 我一直在尝试使用命令
sed -e '/</session-config>/a\<security-constraint>\' -i filename
但它不起作用。错误是:
sed:-e表达式#1,char 43:未终止的`s&#39;命令
示例inputfile
<more></more>
<session-config>20</session-config>
<otherfields>10</otherfields>
<more></more>
<session-config>20</session-config>
<security-constraint>
<otherfields>10</otherfields>
请帮忙。
感谢。
答案 0 :(得分:2)
你需要逃避/
内的</session-config>
。否则,它被视为要匹配的正则表达式的结尾,然后s
是应用于这些行的命令的开头:
sed -e '/<\/session-config>/a\<security-constraint>\' -i filename
答案 1 :(得分:1)
使用不同的分隔符。另外,一些sed在a之后需要换行符。这应该有效:
sed -e '\@<session-config>@a\
<security-constraint>\'
答案 2 :(得分:0)
使用另一个分隔符,您不需要反斜杠
你找到的字符串必须放回去,所以请使用&amp;为了它。
新行上的新字符串:我使用\n
。当你的sed不支持它时
使用真正的新线。
如果要添加一行,请不要使用a
,而应将其替换为替换字符串。
sed -e '#</session-config>#&\n<security-constraint>trust_nobody</security-constraint>#' -i filename
答案 3 :(得分:0)
为了清晰,简单,健壮,可移植以及所有其他理想的软件质量,只需使用awk:
$ awk '{print} index($0,"</session-config>"){print "<security-constraint>"}' file
<more></more>
<session-config>20</session-config>
<security-constraint>
<otherfields>10</otherfields>
请注意,上面的命令正在处理您要搜索的文本和要添加为字符串的文本,因此不必关心它们包含哪些字符(当然,终止"
的字符串除外)。以上内容适用于所有操作系统中的所有现代awks。