天天看点

由一个实例浅析sed用法

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

1

2

3

4

5

6

7

8

<code>[root@func-lms-001 ~]</code><code># cat 123.txt </code>

<code>james</code>

<code>curry</code>

<code>  </code><code>durant</code>

<code>wade</code>

<code>yaoming</code>

<code>     </code><code>messi</code>

<code>[root@func-lms-001 ~]</code><code>#</code>

如果我们想在james前面加上lebron,那么采用的sed语句就是:#sed -i '/^james/s/^/lebron /' 123.txt,如果要在curry后面加上 champion,那么采用的语句就是:#sed -i '/^curry/s/$/ champion!/' 123.txt 。

使用完上面两句话之后,再#cat一下,看下效果:

<code>lebron james</code>

<code>curry champion!</code>

现在我们要把 durant前面加上FMVP这几个字母,按照上面的语句找葫芦画瓢的话,应该是:#sed -i '/^durant/s/^/FMVP /' 123.txt 。但是很抱歉,这个语句是错误的!因为^是匹配开头durant的意思,而我们再看一下durant那一行的开头是空格。

那么就要用liunx的正则来匹配空格,于是这句话就变成了:#sed -i '/^\s\+durant/s/^/FMVP/' 123.txt ,^\s\+这个就是正则里匹配空格的意思 。

#cat一下:

<code>FMVP   durant</code>

那么现在要在messi后面加上"GOAL !!!",就很简单了。语句是:#sed -i '/^\s\+messi/s/$/ GOAL !!!/' 123.txt 。

以上我们把有/无空格情况下的首尾添加字符都练习了一遍,下面我们要看看如果要在中间添加怎么办?

比如说,有一天苦逼的运维接到开发PL的邮件,说”由于安全基线要求,现在需要监听内网端口“,具体的需求就是把所有含tomcat的模块里的server.xml的文件里添加上内网IP。

原有的server.xml的节选如下:

现在要把&lt;Connector port="8099" protocol="AJP/1.3" redirectPort="8443" /&gt; 这一句里面加上内网IP,改成这样:

请问怎么做?

答案1:

答案2:

 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1939938