(一)sed流文字編輯器介紹
sed (stream editor) 本質上是乙個編輯器,但是它是非互動式的,這點與vim不同;同時它又是面向字元流的,輸入的字元流經過sed的處理後輸出。這兩個特性使得sed成為命令列下面非常有用的乙個處理工具,同時sed能夠完美的配合正規表示式使用。
這裡先談一下互動式和非交戶式的編輯器。
vim:需要進到文字裡面進行操作。
sed:不需要進行到文字裡面進行操作。
而所謂流編輯器,是指sed每次只從檔案(或輸入)讀入一行,然後對該行進行指定的處理,並將結果輸出到螢幕(除非取消了螢幕輸出又沒有顯式地使用列印命令),接著讀入下一行。整個檔案像流水一樣被逐行處理然後逐行輸出。這個就是流編輯器。
最後,sed能夠非常完美的配合正規表示式使用。
(二 )sed流文字編輯器的格式
sed命令的格式:
sed [options] ' script' inputfile(s)
options是指sed的命令列引數,這一塊並不是重點,引數也不多。
script是指需要對輸入執行的乙個或者多個操作指令(instruction),sed會依次讀取輸入檔案的每一行到快取中並應用script中指定的操作指令,因此而帶來的變化並不會影響最初的檔案(注:如果使用sed時指定-i引數則會影響最初的檔案)。
同大多數linux命令一樣,sed也是從stdin中讀取輸入,並且將輸出寫到stdout,但是當filename被指定時,則會從指定的檔案中獲取輸入,輸出可以重定向到檔案中,但是需要注意的是,該檔案絕對不能與輸入的檔案相同。
如果操作指令很多,為了不影響可讀性,可以將其寫到檔案中,並通過-f引數指定scriptfile:
sed -f scriptfile filename
這裡有乙個建議,在命令列中指定的操作指令最好用單引號引起來,這樣可以避免shell對特殊字元的處理(如空格、$等)。這個建議同樣適用grep/awk等命令,當然如果有時候確實不適合使用單引號時,記得對特殊字元轉義。
sed選項:
–n 要讀取的行號,可以關閉自動列印
-e 執行多個sed 命令
-f 執行指令碼
-i 編輯檔案內容
-i.bak 編輯的同時創造.bak的備份
-r 使用擴充套件的正規表示式
sed命令
1 基本命令
p 列印當前模式空間的內容,追加到預設輸出之後 \n
d 刪除模式空間匹配的行,並進行下一輪迴圈
a 在匹配後追加文字,支援使用\n來實現多行追加
i 在匹配行前面加入文字
c 替換,把選定的行改為新的文字
w 儲存模式匹配的行,到新的檔案中。w/pattern/file
r 讀取檔案/一行,相當於在符合的行後面追加檔案/行。
2 替換命令:
s///:查詢替換,支援使用其它分隔符,s@@@,s###
g
在行內進行全域性替換 不加
g替換行內第乙個符合的字串。
3 高階命令
n 追加下一行內容到當前行\n後面
d 刪除\n 之前的內容
p列印當前模式空間開端至\n的內容,並追加到預設輸出之前
4 操作保持空間的命令
操作保持空間的命令如下所示:
h 將pattern space中的內容拷貝到hold space中,原來的hold space裡的內容被清除
g 將hold space中的內容拷貝到pattern space中,原來pattern space裡的內容清除
x 交換模式空間和保持空間的內容
總結如下表:
名稱
命令
說明
儲存(hold)
h/h將模式空間的內容複製或者追加到保持空間
取回(get)
g/g將保持空間的內容複製或者追加到模式空間
交換(exchange)
x 交換模式空間和保持空間的內容
(三)sed命令執行流程
無論是將操作指令通過命令列指定,還是寫入到檔案中作為乙個sed指令碼,必須包含至少乙個指令,否則用sed就沒有意義了。一般會同時指定多個操作指令,這時候指令之間的順序就顯得非常重要。而你的腦海中必須有這麼乙個概念,即每個指令應用後,當前輸入的行會變成什麼樣子。要做到這一點首先必須要了解sed的工作原理,要做到「知其然,且知其所以然」。
每條操作指令(instruction由pattern和procedure兩部分組成,pattern一般是用'/'分隔的正規表示式,而procedure則是一連串編輯命令(action)。
sed的處理流程,簡化後是這樣的:
1 讀入新的一行內容到快取空間;
2 從指定的操作指令中取出第一條指令,判斷是否匹配pattern;
5 當所有指令都應用之後,輸出快取行的內容;
6 回到第1步繼續讀入下一行內容;
如下圖所示:
(四)sed命令位址的選擇
(一)『 script 』 :
分為位址和命令
1 2
num:指定的行 $
最後一行,
/pattern/
:被此處模式所能匹配的每一行 3
num1
,num2
num1
,+num2
/pat1/
,/pat2/
num,/pat1/ 4
步進 1~2奇數行
2~2偶數行
ps:
sed流編輯器
sed預設不編輯原始檔,僅對模式空間中的資料做處理 而後,處理結束後,將模式空間中的內容列印至螢幕。sed options addresscommand file.用行,和命令一起來操作文字 options n 靜默顯示,不再顯示模式空間中的內容 i 直接修改原檔案 e 指令碼 e指令碼 可以同時執...
sed 流編輯器
sed 模式空間 預設不編輯原檔案,僅對模式空間中的資料做處理 而後,處理結束後,將模式空間列印至螢幕 sed options addresscommand file n 靜默模式,不再預設顯示模式空間中的內容 i 直接修改原檔案 e script e script 可以同時執行多個指令碼 f pa...
文字編輯器
include stdio.h include string.h include stdlib.h define len sizeof struct linetable struct linetable main 輸出並加入行號 display struct linetable head else ...