一. sed 命令行格式
一般形式: sed [ 選項 ] sed 命令 輸入文件
二. sed 腳本文件格式
sed [ 選項 ] –f sed 腳本文件 輸入文件
三. 第一行具有 sed 命令解釋器的 sed 腳本文件格式
sed 腳本文件 [ 選項 ] 輸入文件
1. sed 在文件中查詢文本的方式
方式 |
含義 |
|
x |
X 爲行號,如 1 |
|
x,y |
表示範圍從 x 到 y |
|
/pattern/ |
查詢包含模式的行 |
|
/pattern/ pattern / |
查詢包含兩個模式的行 |
|
pattern/,x |
在給定行號中,查詢包含模式的行 |
|
x,/ pattern / |
通過行號和模式查詢匹配模式行 |
|
x,y! |
查詢不包含指定行號 x 和 y 的行 |
|
2. sed 編輯命令
命令 |
含義 |
|
P |
打印匹配行 |
|
= |
顯示文件行號 |
|
a/ |
在定位行號後附加新文本信息 |
|
i/ |
在定位行號後插入新文本信息 |
|
d |
刪除低位行 |
|
c/ |
用新文本替換定位文本 |
|
s |
適用替換模式替換相應模式 |
|
r |
從另外一個文件中讀文本 |
|
w |
寫文本到一個文件 |
|
q |
第一個模式匹配完成後退出或立即退出 |
|
l |
顯示與八進制 ASCII 代碼等價的控制字符 |
|
{} |
在定位行執行的命令組 |
|
n |
從另一個文件中讀文本下移行,並附加在下一行 |
|
g |
將模式 2 粘貼到 /pattern n/ |
|
y |
傳送字符 |
|
n |
延續到下一輸入行:允許跨行的模式匹配語句 |
|
3. sed 編程舉例
命令 |
例 |
含義 |
p x |
$ sed -n ‘2p’ quote.txt |
打印第二行, $ 表示最後一行 |
p x,y |
$ sed -n ‘1,3p’ quote.txt |
打印 1 到 3 行 |
/pattern/ |
$ sed -n ‘/Neave/’p quote.txt |
匹配單詞 Neave ,並打印此行 |
x,/pattern/ |
$ sed -n ‘4,/Neave/’p quote.txt |
在第四行查 Neave ,並打印此行 |
//$/ |
$ sed -n ‘//$/’p quote.txt |
匹配元字符 |
1,$p |
$ sed -n ‘1,$p/’p quote.txt |
顯示整個文件, $ 表示最後一行 |
/.*ing/ |
$ sed -n ‘/.*ing/’p quote.txt |
匹配任意字母,後跟任意字母的 0 次或者多次重複 |
/pattern/= |
$ sed -e ‘/music/=’ quote.txt |
結果將打印出匹配的行號和整個文件 |
|
$ sed -n ‘/music/=’ quote.txt |
結果只打印出匹配的行號 |
a/ |
創建 sed 腳本 append.sed #!/bin/sed –f /compay/ a/ Then suddenly it happened |
命令爲 $ ./append.sed quote.txt 執行結果是在 quote.txt 文件找到 compay , c/ 表示附加操作,然後在其後附加文件 Then suddenly it happened |
i/ |
創建 sed 腳本 #!/bin/sed –f 4 i/ Then suddenly it happened |
在行號 4 之前插入文本信息 |
c/ |
創建 sed 腳本 #!/bin/sed –f /honeysuckle/ c/ The office band played well |
執行結果是在 quote.txt 文件找到 honeysuckle , a/ 表示修改操作,將 The office band played well 替換 honeysuckle 所在的整行文本。 |
d |
$ sed ‘1,3d’ quote.txt |
刪除 1 到 3 行 |
|
$ sed ‘/Neave/d’ quote.txt |
刪除 Neave 所在行 |
s |
$ sed ‘s/night/NIGHT/’ quote.txt |
查詢 night 用 NIGHT 替換,只替換第一次匹配 |
s///g |
$ sed ‘s/night/NIGHT/g’ quote.txt |
全局替換 |
s///w |
$ sed ‘s/night/NIGHT/w sed.out’ quote.txt |
將 NIGHT 替換 night 的結果保存到 sed.out |
s// &/ |
$ sed ‘s/night/NIGHT &/p’ quote.txt |
查詢模式 nigiht 並保存,將替換文本 NIGHT 放在被替換模式之前, NIGHT 和 & 換位置,結果 NIGHT 放在被替換模式之後 |
保存 sed 結果 |
$ sed ‘/Neave/ w dht’ quote.txt |
將查詢 Neave 的匹配結果行,寫入文件 dht 中。 |
從文件中讀文本 |
$ sed ‘/Neave/r sedex.txt’ quote.txt |
在 quote.txt 中匹配模式 Neave , r 表示 sed 將從另一個文件中讀文本,讀取到的文本放在匹配模式 Neave 後。 |
q |
$ sed ‘/.a.*/q’ quote.txt |
查詢首次出現模式,然後退出 |
l |
$ sed -n ‘1 ,$l ’ quote.txt |
表示從 1 到 $ 最後一行,列出整個文件的控制字符 |
從 shell 向 sed 傳值 |
$NAME=”It’s a go situation” $REPLACE=”GO” $echo $NAME | sed “s/go/$REPLSCE/g” It’s a GO situation
|
Sed 命令用的是雙引號 ”” |
|
|
|
4. 一行名命令集
命令集 |
含義 |
‘s///.$//g’ |
刪除以句點結尾行 |
‘-e /abcd/d’ |
刪除包含 abcd 的行 |
‘s/[][][]*/[]/g’ |
刪除一個以上空格,用一個空格代替 |
‘s/^[][]*/[]/g’ |
刪除行首空格 |
‘s//.[][]*/[]/g’ |
刪除句點後跟兩個或更多空格,用一個空格代替 |
‘s/^$//g’ |
刪除空行 |
‘s/^.//g’ |
刪除第一個字符 |
‘s/COL/(…/)//g’ |
刪除 COL 以及緊跟 COL 的後三個字符 |
s/^////g |
從路徑中刪除第一個 / |
追加文本 |
$ echo ”A B” | sed ‘s/A/ & C/g’ 結果 A C B |
刪除首字符 |
$ echo “abc.doc” | sed s/^.//g 結果 bc.doc |
增加擴展名 |
$ echo “abc” | sed s/$/.doc/g 結果 abc.doc |
sed 在 shell 中的應用
sed 用於刪除 所有文件的空行
#!/bin/sh
#forsed
for files in `ls fo*`
do
sed -e "/^$/d" $files >$files.hold
mv $files.hold $files
done