匹配段落并使用sed/awk/grep替换为新段落



我想在一个文件中匹配多个连续行,然后用新的多个连续行替换它。例如:

模式:

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />

将被替换为:

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
acceptCount="450" maxConnections="10000"
redirectPort="8443" server=" " />

尽管这两个段落中有几个关键词是共同的,但只要考虑它们是不同的。

我尝试了以下操作,但是没有成功:

sed -i 's/<Connector port="8080" protocol="HTTP/1.1" nconnectionTimeout="20000" nredirectPort="8443" />/<Connector port="8080" protocol="HTTP/1.1" nconnectionTimeout="20000" nacceptCount="450" maxConnections="10000" nredirectPort="8443" server=" " />/g' server.xml

我怎样才能做到以上。

谢谢。

sed的-z选项允许轻松替换多行块:

sed -E -z 's!(<Connector port="8080" protocol="HTTP/1.1"
s+connectionTimeout="20000"
s+)(redirectPort="8443")!1acceptCount="450" maxConnections="10000"
2 server=" "!'   inputfile

您可以尝试sedawk,尽管为该工作制作的工具可能更好。

sed -E '/[a-zA-Z]*."20000"/ {N;s|[a-z]*"8443".*|acceptCount="450" maxConnections="10000"nttredirectPort="8443" server=" " />|}'
awk 'NR==3{$0="ttacceptCount="450" maxConnections="10000"nttredirectPort="8443" server=" "/>"}1'

最新更新