由一个实例浅析sed用法

发布时间:2024-03-10
建站服务器
首先,假设我们有一个文件,叫123.txt,#cat一下看到里面的内容是这样的:
[root@func-lms-001~]#cat123.txtjamescurrydurantwadeyaomingmessi[root@func-lms-001~]#
如果我们想在james前面加上lebron,那么采用的sed语句就是:#sed -i \\\’/^james/s/^/lebron /\\\’ 123.txt,如果要在curry后面加上 champion,那么采用的语句就是:#sed -i \\\’/^curry/s/$/ champion!/\\\’ 123.txt 。
使用完上面两句话之后,再#cat一下,看下效果:
[root@func-lms-001~]#cat123.txtlebronjamescurrychampion!durantwadeyaomingmessi[root@func-lms-001~]#现在我们要把 durant前面加上fmvp这几个字母,按照上面的语句找葫芦画瓢的话,应该是:#sed -i \\\’/^durant/s/^/fmvp /\\\’ 123.txt 。但是很抱歉,这个语句是错误的!因为^是匹配开头durant的意思,而我们再看一下durant那一行的开头是空格。
那么就要用liunx的正则来匹配空格,于是这句话就变成了:#sed -i \\\’/^\\\\s\\\\ durant/s/^/fmvp/\\\’ 123.txt ,^\\\\s\\\\ 这个就是正则里匹配空格的意思 。
#cat一下:
[root@func-lms-001~]#cat123.txtlebronjamescurrychampion!fmvpdurantwadeyaomingmessi[root@func-lms-001~]#
那么现在要在messi后面加上goal !!!,就很简单了。语句是:#sed -i \\\’/^\\\\s\\\\ messi/s/$/ goal !!!/\\\’ 123.txt 。
以上我们把有/无空格情况下的首尾添加字符都练习了一遍,下面我们要看看如果要在中间添加怎么办?
比如说,有一天苦逼的运维接到开发pl的邮件,说”由于安全基线要求,现在需要监听内网端口“,具体的需求就是把所有含tomcat的模块里的server.xml的文件里添加上内网ip。
原有的server.xml的节选如下:
<service name=lms>
<connector port=8080 connectiontimeout=20000 protocol=org.apache.coyote.http11.http11nioprotocol redirectport=8443 enablelookups=false disableuploadtimeout=true maxthreads=500 minsparethreads=20 acceptcount=100/>
<connector port=8088 connectiontimeout=20000 protocol=org.apache.coyote.http11.http11nioprotocol redirectport=8443 enablelookups=false disableuploadtimeout=true maxthreads=500 minsparethreads=20 acceptcount=100/>
<connector port=8099 protocol=ajp/1.3 redirectport=8443 />
<engine defaulthost=localhost name=catalina>
<realm classname=org.apache.catalina.realm.lockoutrealm>
<realm classname=org.apache.catalina.realm.userdatabaserealm resourcename=userdatabase />
</realm>
现在要把<connector port=8099 protocol=ajp/1.3 redirectport=8443 /> 这一句里面加上内网ip,改成这样:
<service name=lms>
<connector port=8080 connectiontimeout=20000 protocol=org.apache.coyote.http11.http11nioprotocol redirectport=8443 enablelookups=false disableuploadtimeout=true maxthreads=500 minsparethreads=20 acceptcount=100/>
<connector port=8088 connectiontimeout=20000 protocol=org.apache.coyote.http11.http11nioprotocol redirectport=8443 enablelookups=false disableuploadtimeout=true maxthreads=500 minsparethreads=20 acceptcount=100/>
<connector port=8099 address=1.2.3.4 protocol=ajp/1.3 redirectport=8443 />
<engine defaulthost=localhost name=catalina>
<realm classname=org.apache.catalina.realm.lockoutrealm>
<realm classname=org.apache.catalina.realm.userdatabaserealm resourcename=userdatabase />
</realm>
请问怎么做?
答案1:
sed-i\\\'/<connectorport=8099/s/port=8099/port=8099address=1.2.3.4/g\\\'server.xml答案2:
sed-i\\\'s@connectorport=8099@&address=1.2.3.4@\\\'server.xml
上一个:用自来水泡茶最好静置一天
下一个:非晶硅玻璃清洗机

备份到电脑的qq聊天记录怎么导入电脑的Qq(qq聊天记录备份到电脑怎么用)
美国dresser三通阀
怎么给电脑重新分盘,怎么把d盘多余的空间分给c盘
主板不识别m2固态硬盘怎么办,主板不认固态硬盘怎么办
合伙协议怎么写才有效
家里零线断了为什么会烧电器?看看图解
阿里云服务器的型号区别
离婚后无力支付抚养费怎么处理
推送:便携式综合气象仪—可快速布置的多要素移动气象站(顺+丰+包+邮)
三数字.tv域名市场火热!899.tv小五位数成交