由一个实例浅析sed用法

建站服务器

首先,假设我们有一个文件,叫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

更多关于云服务器域名注册虚拟主机的问题,请访问西部数码官网:www.west.cn

赞(0)
声明:本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-62778877-8306;邮箱:fanjiao@west.cn。本站原创内容未经允许不得转载,或转载时需注明出处:西部数码知识库 » 由一个实例浅析sed用法

登录

找回密码

注册