天天看點

由一個執行個體淺析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