我想在一个文件中匹配多个连续行,然后用新的多个连续行替换它。例如:
模式:
<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
您可以尝试sed
或awk
,尽管为该工作制作的工具可能更好。
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'