Sed命令错误

时间:2015-05-21 03:20:21

标签: linux sed

我在文件中有一行,想在下面添加。 我一直在尝试使用命令

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>

请帮忙。

感谢。

4 个答案:

答案 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。