sed模式查找和替换行

时间:2014-06-30 10:12:42

标签: linux sed

我需要使用sed来搜索这一行

<Connector URIEncoding="UTF-8" port="8009" protocol="AJP/1.3" redirectPort="8443" />

并将其替换为新的3行

<Connector URIEncoding="UTF-8" port="8009" protocol="AJP/1.3" redirectPort="8443"
maxThreads="300" minSpareThreads="25" maxSpareThreads="75" acceptCount="100"
enableLookups="false"  connectionTimeout="60000" />

我使用了以下模式,但我相信我错过了逃避部分

sed -i 's/ <Connector URIEncoding="UTF-8" port="8009" protocol="AJP/1.3" redirectPort="8443" />/<Connector URIEncoding="UTF-8" port="8009" protocol="AJP/1.3" redirectPort="8443"
        maxThreads="300" minSpareThreads="25" maxSpareThreads="75" acceptCount="100"
        enableLookups="false"  connectionTimeout="60000" />/g'

建议

2 个答案:

答案 0 :(得分:1)

问题是您的搜索字符串确实包含/。我把它作为sed代码的一部分 尝试

sed -i 's|search|replace|g' file

你的sed在字符串前搜索一个空格。需要删除:

s/ <

正确

s/<

完成命令:

sed -i 's|<Connector URIEncoding="UTF-8" port="8009" protocol="AJP/1.3" redirectPort="8443" />|<Connector URIEncoding="UTF-8" port="8009" protocol="AJP/1.3" redirectPort="8443"     maxThreads="300" minSpareThreads="25" maxSpareThreads="75" acceptCount="100" enableLookups="false"  connectionTimeout="60000" />|g' file

答案 1 :(得分:0)

要么反斜杠搜索字符串中的斜杠(你也应该为点做这些以防止它们与任何字符匹配)。

或者,使用适当的XML处理工具来处理XML数据。例如,xsh

open file.xml ;
for //Connector[@URIEncoding="UTF-8" and @port="8009"
                and @protocol="AJP/1.3" and @redirectPort="8443"] {
    set @maxThreads 300 ;
    set @minSpareThreads 25 ;
    set @enableLookups 'false' ;
    # etc.
}
save :b ;