1. 程式人生 > >三劍客命令之Sed的用法總結

三劍客命令之Sed的用法總結

功能 重點 -s 輸出 img test n+1 圖片 functions

sed是Linux系統中最為廣泛使用的命令行編輯器,sed本身也是一個管道命令,可將數據進行替換/刪除/新增/選取等功能。sed命令的執行過程大致如下:

1)一次從輸入中讀取一行數據;2)根據所提供的編輯器命令匹配數據;3)按照命令修改流中的數據;4)將新的數據輸出到STDOUT

sed命令格式如下:

[root@centos7-magedu ~]# sed [-nefr] [動作]

-n 靜默模式,只有經過sed特殊處理的行才能夠顯示出來;

-e 命令行模式的sed編輯,常用來分隔多個動作;

-f 直接將sed的動作寫入一個文件,-f filename則可執行filename內的sed命令

-r 支持拓展正則表達式(默認為基本正則表達式)

-i 修改文件內容並保存,後緊跟.bak可對將原文件另存為(filename.bak)(任意名稱均可)

function 有這些參數:

a:行後新增,往往接字符串

c:替換,往往與地址定界配合使用

d:刪除,通常其後不接任何參數

i:行前新增,字符串出現在當前行的上一行

p:打印,如只顯示第二行 sed -n ‘2p’

s:替換,通常與正則表達式配合使用,多用於文本行內的過濾和字符串替換

下面重點說明下 sed命令下的替換選項:

1.替換標記

技術分享圖片

使用sed將文本內的test替換為trial

技術分享圖片

由此看出,默認情況下只替換每行中出現的第一處,下面有4中可用的標記:

1>數字,表明新文本將替換第幾處模式匹配的地方;2>g,表明新文本將替換所有匹配的文本;3>p,表明原先行的內容要打印;4>w file,將替換的結果寫到文件中

2.替換字符

當用傳統的/替換文件中的路徑名時,往往比較麻煩,例如用C shell替換/etc/passwd文件中的bash shell,必須這麽做:

sed ‘s/\/bin\/bash/\/bin\/csh/’ /etc/passwd,這通常會帶來困惑和錯誤,此時可用@替代

sed ‘s@/bin/bash@/bin/csh@’ /etc/passwd

3.過濾文本中的單詞

例題:用sed命令統計/etc/init.d/functions文件中每個單詞的出現次數,並排序

分析:對單行進行正向截取很難,因為‘s@.*[^[:alpha:]](\<[[:alpha:]]+\>).*@\1@p’一行只能替換一個單詞,所以只能用反向截取,考慮將除了單詞外的字符轉換成換行:

技術分享圖片

第二部分介紹高級編輯命令

P:打印模式空間開端至\n內容,並追加到默認輸出之前

h:把模式空間的內容覆蓋至保持空間中

H:把模式空間中的內容追加至保持空間中

g:從保持空間取出數據覆蓋至模式空間

G:從保持空間取出內容追加至模式空間

x:把模式空間中的內容與保持空間中的內容進行互換

n:讀取匹配到的行的下一行覆蓋至模式空間

N:讀取匹配到的行的下一行追加至模式空間

d:刪除模式空間中的行

D:如果模式空間包含換行符,則刪除直到第一個換行符的模式空間中的文本,並不會讀取新的輸入行,而使用合成的模式空間啟動新循環。如果模式空間不包含換行符,則會像發出d命令那樣啟動正常的新循環。

上述高級編輯命令可進行如下組合:

‘n;p‘ 輸出偶數行

‘n;d‘ 只顯示奇數行

‘g‘ 所有行變為空行

‘$!N;$!D‘ 輸出倒數後兩行

‘N;D‘只輸出最後一行

‘1!G;h;$!d‘倒序輸出

例:將文本文件的n和n+1行合並為一行,n為奇數行

技術分享圖片

三劍客命令之Sed的用法總結