天天看點

Linux shell基礎(五)sed指令一、sed指令二、sed 比對搜尋用法三、sed删除特定行用法四、sed替換特定内容用法五、sed調換字元串次序用法

sed是一種強大的流式編輯器 (stream editor for filtering and transforming text),它能夠完美的使用正規表達式,逐行處理文本并把結果顯示到螢幕上。sed的強項是替換文本中的特定字元,而寫shell有個步驟就是從一段文本中截取一段字元進行處理,是以熟練掌握sed指令是寫shell腳本的基本技能。

用法:

sed [選項]... {腳本(如果沒有其他腳本)} [輸入檔案]

sed [options] 'command' file(s)

sed [options] -f scriptfile file(s)

選項:

-p 查找

-d 删除

-s 替換

sed可以向grep一樣查找檔案文本中包含關鍵字的行并把改行顯示在螢幕上。

指令寫法:sed -n '/(比對的字元串)/'p 檔案名(簡記為-np)

1、搜尋passwd檔案中包含root關鍵字的行。

sed -n '/root/'p passwd
Linux shell基礎(五)sed指令一、sed指令二、sed 比對搜尋用法三、sed删除特定行用法四、sed替換特定内容用法五、sed調換字元串次序用法

2、搜尋ssh檔案中以#開頭的行

sed -n '/^#/'p ssh
Linux shell基礎(五)sed指令一、sed指令二、sed 比對搜尋用法三、sed删除特定行用法四、sed替換特定内容用法五、sed調換字元串次序用法

3、搜尋正則'o+t'類型的行

sed -nr ‘/o+t/’p passwd
Linux shell基礎(五)sed指令一、sed指令二、sed 比對搜尋用法三、sed删除特定行用法四、sed替換特定内容用法五、sed調換字元串次序用法

注意“+”号屬于擴充正則,需要跟-r選項才能用

4、搜尋正則‘兩次o’的行

sed -nr '/o{2}/'p passwd
Linux shell基礎(五)sed指令一、sed指令二、sed 比對搜尋用法三、sed删除特定行用法四、sed替換特定内容用法五、sed調換字元串次序用法

5、搜尋正則root或者bus的行‘root|bus’

sed -nr '/root|bus/'p passwd
Linux shell基礎(五)sed指令一、sed指令二、sed 比對搜尋用法三、sed删除特定行用法四、sed替換特定内容用法五、sed調換字元串次序用法

6、不區分大小寫搜尋關鍵字所在的行

sed -n '/nologin/'Ip passwd 注意是大寫字母I,不是管道符号|
Linux shell基礎(五)sed指令一、sed指令二、sed 比對搜尋用法三、sed删除特定行用法四、sed替換特定内容用法五、sed調換字元串次序用法

指令寫法:sed -n ‘行号或行号描述’p 檔案路徑 注意單引号''内不需要跟兩個//

1、顯示檔案第2行内容

sed -n '2'p passwd
Linux shell基礎(五)sed指令一、sed指令二、sed 比對搜尋用法三、sed删除特定行用法四、sed替換特定内容用法五、sed調換字元串次序用法

2、顯示檔案第6行至10行内容

sed -n '6,10'p passwd 注意中間是逗号,不是-
Linux shell基礎(五)sed指令一、sed指令二、sed 比對搜尋用法三、sed删除特定行用法四、sed替換特定内容用法五、sed調換字元串次序用法

3、全文顯示

sed -n '1,$'p passwd 注意不能寫成“sed -n '^,$'p passwd”
Linux shell基礎(五)sed指令一、sed指令二、sed 比對搜尋用法三、sed删除特定行用法四、sed替換特定内容用法五、sed調換字元串次序用法

指令可以用-e參數比對多個條件,注意多個條件是或者關系,隻要符合其中的一條就會被找到,如果比對兩條規則,那麼改行會顯示兩次

顯示第一行和含有root關鍵字的行

sed -e '/root/'p -e '1'p -n passwd
Linux shell基礎(五)sed指令一、sed指令二、sed 比對搜尋用法三、sed删除特定行用法四、sed替換特定内容用法五、sed調換字元串次序用法

對特定大檔案,使用sed指令删除部分内容,要比vim去打開相應的檔案再删除要實用的多。沒有加-i選項的删除隻是顯示上的删除,不會影響檔案本身的内容,但加了-i選項後會作用于原始檔案,是以删除前一定要做好備份。

指令寫法:sed '/(關鍵字)/'d 檔案路徑

1、删除檔案的第一行

sed '1'd 1.txt
Linux shell基礎(五)sed指令一、sed指令二、sed 比對搜尋用法三、sed删除特定行用法四、sed替換特定内容用法五、sed調換字元串次序用法
注意第一行已經被删掉了

2、删掉含關鍵字“bus”的行

sed '/bus/'d 1.txt
Linux shell基礎(五)sed指令一、sed指令二、sed 比對搜尋用法三、sed删除特定行用法四、sed替換特定内容用法五、sed調換字元串次序用法

3、删掉特定時間段之前的檔案的思路

首先用grep -n >指令通過時間關鍵字過濾出行數。

然後使用sed '1,找到的最後行行号‘d 方式删除資料

指令寫法:

sed '1,$s///g' 檔案路徑

1、替換檔案前10行中的ro+為R

sed -r '1,10/ro+/R/g' 1.txt
Linux shell基礎(五)sed指令一、sed指令二、sed 比對搜尋用法三、sed删除特定行用法四、sed替換特定内容用法五、sed調換字元串次序用法

2、替換檔案中的數字為空,其實就是删掉檔案中所有的數字

sed 's/[0-9]//g' 1.txt
Linux shell基礎(五)sed指令一、sed指令二、sed 比對搜尋用法三、sed删除特定行用法四、sed替換特定内容用法五、sed調換字元串次序用法

這個指令經常被用來判斷輸入的内容是否是數字

3、替換檔案中的字母為空,其實就是删掉檔案中所有的英文字母

sed 's/[a-zA-Z]//g' 檔案名 (複習tr 指令 tr [a-z] [A-Z])
Linux shell基礎(五)sed指令一、sed指令二、sed 比對搜尋用法三、sed删除特定行用法四、sed替換特定内容用法五、sed調換字元串次序用法

4、在所有行前面加上字元串123

小括号為擴充正則符号,使用時要加-r選項。

sed -r 's/(.*)/123&/g' test.txt
Linux shell基礎(五)sed指令一、sed指令二、sed 比對搜尋用法三、sed删除特定行用法四、sed替換特定内容用法五、sed調換字元串次序用法

替換文字的順序的關鍵是要用合适的正則

小括号内容在下文中可以

sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1:/' test.txt |head -n5
Linux shell基礎(五)sed指令一、sed指令二、sed 比對搜尋用法三、sed删除特定行用法四、sed替換特定内容用法五、sed調換字元串次序用法

該操作的難點在于分段的正則的寫法。

 本文轉自 whytl 51CTO部落格,原文連結:http://blog.51cto.com/11934539/2061781

繼續閱讀