Linux shell基礎(五)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 匹配搜索用法

sed可以向grep一樣查找文件文本中包含關鍵字的行並把改行顯示在屏幕上。
命令寫法:sed -n '/(匹配的字符串)/'p 文件名(簡記爲-np)

1、搜索passwd文件中包含root關鍵字的行。

sed -n '/root/'p passwd

Linux  shell基礎(五)sed命令

2、搜索ssh文件中以#開頭的行

sed -n '/^#/'p ssh

Linux  shell基礎(五)sed命令

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

sed -nr ‘/o+t/’p passwd

Linux  shell基礎(五)sed命令
注意“+”號屬於擴展正則,需要跟-r選項才能用

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

sed -nr '/o{2}/'p passwd

Linux  shell基礎(五)sed命令

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

sed -nr '/root|bus/'p passwd

Linux  shell基礎(五)sed命令

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

sed -n '/nologin/'Ip passwd 注意是大寫字母I,不是管道符號|

Linux  shell基礎(五)sed命令

拓展用法:打印指定的行

命令寫法:sed -n ‘行號或行號描述’p 文件路徑 注意單引號''內不需要跟兩個//
1、顯示文件第2行內容

sed -n '2'p passwd

Linux  shell基礎(五)sed命令

2、顯示文件第6行至10行內容

sed -n '6,10'p passwd 注意中間是逗號,不是-

Linux  shell基礎(五)sed命令

3、全文顯示

sed -n '1,$'p passwd 注意不能寫成“sed -n '^,$'p passwd”

Linux  shell基礎(五)sed命令

拓展用法: 多條件過濾

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

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

sed -e '/root/'p -e '1'p -n passwd

Linux  shell基礎(五)sed命令

三、sed刪除特定行用法

對特定大文件,使用sed命令刪除部分內容,要比vim去打開相應的文件再刪除要實用的多。沒有加-i選項的刪除只是顯示上的刪除,不會影響文件本身的內容,但加了-i選項後會作用於原始文件,所以刪除前一定要做好備份。

命令寫法:sed '/(關鍵字)/'d 文件路徑
1、刪除文件的第一行

sed '1'd 1.txt
Linux  shell基礎(五)sed命令
注意第一行已經被刪掉了

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

sed '/bus/'d 1.txt

Linux  shell基礎(五)sed命令

3、刪掉特定時間段之前的文件的思路
首先用grep -n >命令通過時間關鍵字過濾出行數。
然後使用sed '1,找到的最後行行號‘d 方式刪除數據

四、sed替換特定內容用法

命令寫法:
sed '1,$s///g' 文件路徑

1、替換文件前10行中的ro+爲R

sed -r '1,10/ro+/R/g' 1.txt

Linux  shell基礎(五)sed命令

2、替換文件中的數字爲空,其實就是刪掉文件中所有的數字

sed 's/[0-9]//g' 1.txt

Linux  shell基礎(五)sed命令
這個命令經常被用來判斷輸入的內容是否是數字

3、替換文件中的字母爲空,其實就是刪掉文件中所有的英文字母

sed 's/[a-zA-Z]//g' 文件名 (複習tr 命令 tr [a-z] [A-Z])

Linux  shell基礎(五)sed命令

4、在所有行前面加上字符串123
小括號爲擴展正則符號,使用時要加-r選項。

sed -r 's/(.*)/123&/g' test.txt

Linux  shell基礎(五)sed命令

五、sed調換字符串次序用法

替換文字的順序的關鍵是要用合適的正則
小括號內容在下文中可以

命令寫法:

sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1:/' test.txt |head -n5

Linux  shell基礎(五)sed命令

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章