由一个实例浅析sed用法

发布时间:2020-07-06 10:35:05 作者:苏幕遮618
来源:网络 阅读:831

首先,假设我们有一个文件,叫123.txt,#cat一下看到里面的内容是这样的:

[root@func-lms-001 ~]# cat 123.txt 
james
curry
  durant
wade
yaoming
     messi
[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 ~]# cat 123.txt 
lebron james
curry champion!
  durant
wade
yaoming
     messi
[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 ~]# cat 123.txt 
lebron james
curry champion!
FMVP   durant
wade
yaoming
     messi
[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 '/<Connector port="8099"/s/port="8099"/port="8099" address="1.2.3.4"/g' server.xml

答案2:

sed -i 's@Connector port="8099"@& address="1.2.3.4"@' server.xml



推荐阅读:
  1. sed个人习惯用法总结
  2. Unix下sed的用法(一)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

正则 表达式 sed

上一篇:学python对电脑配置有什么要求

下一篇:敏捷开发基础知识

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》