簡述
sed編輯器被稱作流編輯器,和普通的交互式文本編輯器恰好相反。在交互式文本編輯器中(比如vim),
你可以用鍵盤命令來交互式地插入、刪除或替換數據中的文本。流編輯器則會在編輯器處理數據之前基于預先
提供的一組規則來編輯數據流。sed編輯器可以根據命令來處理數據流中的數據,這些命令要么從命令行中輸
入,要么存儲在一個命令文本文件中。sed編輯器會執行下列操作。
(1) 一次從輸入中讀取一行數據。
(2) 根據所提供的編輯器命令匹配數據。
(3) 按照命令修改流中的數據。
(4) 將新的數據輸出到STDOUT。
在流編輯器將所有命令與一行數據匹配完畢后,它會讀取下一行數據并重復這個過程。在流編輯器處理完流
中的所有數據行后,它就會終止。
用法格式:
sed [option]… ‘scripts’ inputfile
常用選項:
-n 不輸出模式空間內容 到屏幕。-n選項將禁止sed編輯器輸出。但p替換標記會輸出修改過的行。將二者
配合使用的效果就是只輸出被替換命令修改過的行。
-e 多點編輯,支持多個參數并行篩選
兩種寫法,兩種效果
-e ‘par1;part2’ 僅顯示part2匹配到的行,但是part1匹配到的會做更改
-e’part1’ –e ‘part2’ part1 及part2匹配到的行都會做顯示
seq 100 |sed -ne ‘s/1/ffffff/p’ -ne ‘s/9/ppppp/p’
seq 100 |sed -ne ‘s/1/fffff/;s/9/pppp/p’
兩個命令的顯示結果不一樣,第一種是 都顯示
第二種的話 被s/1/fffff/ 匹配到的行沒有顯示,但是已經做了更改,
再被s/9/pppp/匹配到的話會做顯示,但是被s/9/pppp/的行都會顯示
-f 從指定的文件中讀取編輯腳本
腳本中僅寫地址命令,每條命令寫在一行,多條命令時,分行寫即可
在腳本中寫多條命令時,相當于加上了-e選項
-r 支持擴展的正則表達式
-i.bak 備份文件,并修改原文件
script :地址命令
前面寫地址定界,后面跟命令
地址定界:
1)不給地址,對全文進行處理
2)單地址:
#:指定的行
/pattern/:被此處模式所能匹配到的每一行
下圖中是將passwd文件中包含ma的行bash更改為csh
3)地址范圍:
#,# 從第幾行到第幾行
#,+# 從第幾行至增加的行數
例如:3,4 從第三行到第七行
/pat1/,/part2/
#,/part1/
4) ~: 步進
1~2 奇數行
2~2 偶數行
也同樣可以寫成1~3,相當于顯示1 4 7 10…行
顯示r開頭的行
/part1/,/part2/
編輯命令:
d:刪除模式空間匹配到的行
p:顯示模式空間中的內容
s///:查找替換,支持使用其它分隔符,s@@@,s###
有4種可用的替換標記:
數字,表明新文本將替換第幾處模式匹配的地方;
g,表明新文本將會替換所有匹配的文本;
p,表明原先行的內容要打印出來;
w file,將替換的結果寫到文件中。
在第一類替換中,可以指定sed編輯器用新文本替換第幾處模式匹配的地方。
2表示在每一行第二次匹配處做更改
第四類w選項可以將更改的文件寫入到文本中,如下圖所示
a 在指定行后追加文本 支持\n多行追加
i 在指定行前追加
c 替換命令,支持文本尋址
= 打印行號
!模式空間匹配行做取反處理
r 將一個獨立文件中的數據插入到數據流中。
$ cat data12.txt
This is an added line.
This is the second added line.
$
$ sed ‘3r data12.txt’
data6.txt
This is line number 1.
This is line number 2.
This is line number 3.
This is an added line.
This is the second added line.
This is line number 4
原創文章,作者:mapipi,如若轉載,請注明出處:http://www.www58058.com/78286