sed命令
語法和常用選項
-n 安靜模式鳞绕,不會輸出默認打印信息 加p標記 只會把匹配并修改的內(nèi)容打印出來
如: sed -n 's/hello/a/p' 將匹配到hello的行打印出來八酒,并將hello修改成a
-e 執(zhí)行多條子命令
如: sed -e 's/hello/a' -e 's/wo/b' 將hello換成a诈悍,將wo換成b
-i 將執(zhí)行的修改輸入到文件中,即可以修改文件中的數(shù)據(jù)
如: sed -i? 's/hello/a' file.txt 文件中每行匹配到hello的字符將改成a
-f 可以將子命令寫入腳本文件悬荣,使用-f指定文件執(zhí)行命令
如:sed -f command.txt data.txt
數(shù)字定址和正則定址
數(shù)字定址
sed -n '4s/hello/a/g' data.txt 將第四行中的hello替換成a并輸出打印
sed '4,6/hello/a/' data.txt 將第四行到第六行的hello替換成a
sed '2,+4s/hello/a/' data.txt 將第二行到之后的4行數(shù)據(jù)中的hello替換成a
sed '4,~3s/hello/a/' data.txt 將第四行到下一個是3的倍數(shù)的行數(shù)也就是第六行中的hello替換成a
sed '4~3s/hello/a/' data.txt 從第四行開始每隔3行將hello替換成a
sed '$s/hello/s/' data.txt 將最后一行的hello替換成s
sed '1!/hello/s/' data.txt 除了第一行的hello替換成s
正則定址
sed '/ni/d' message 將匹配到ni的行刪除
sed '/^$/d' message 將空行刪除
sed '/^ts/,/^k/d' 從匹配到ts開頭的行開始到匹配到k開頭的行刪除,如果沒有匹配到ts就沒有刪除的行,如果匹配到ts沒有匹配到k荆烈,則從匹配到ts開頭的行開始刪除到最后一行
sed '2,3{s/cn/kk/;s/a/b/}' message 從2到3行將cn替換成kk,將a替換成b
基本子命令
子命令a(在指定的行下邊添加數(shù)據(jù))
sed 'a A' message 在message文件中的每一行下邊都插入一行為a的內(nèi)容
sed '1,2a A' message 在message文件中的1到2行下邊插入一行a的內(nèi)容
子命令i(與命令a相似,只是在指定行的上邊添加內(nèi)容)
sed 'i A' message 在message文件中的每一行上邊插入一行為A的內(nèi)容
子命令c(將指定的行替換成指定的內(nèi)容)
sed 'c A' message 將message中的每一行替換成A
子命令d(將指定的行刪除)
sed '1,3d' message 將1到3行內(nèi)容刪除
sed 'd' message 將所有數(shù)據(jù)刪除
子命令y(只能替換字符憔购,字符數(shù)量需要相同宫峦,字符一一對應替換)
sed 'y/ab/qw/' message 將每一行的a替換成q,將b替換成w
子命令=(將行號打印出來)
sed '=' message 將每行的行號和數(shù)據(jù)打印出來
sed '1,2=' message 將1到2行的行號和數(shù)據(jù)打印出來
子命令r(類似a命令玫鸟,也是將內(nèi)容追加到指定行的后邊,只不過r是將指定文件的內(nèi)容添加到指定行下邊)
sed '2r a.txt' message 將a.txt的內(nèi)容添加到message的第二行的下邊
子命令s(替換字符串)
sed 's/ac/qw/' message 將message中的ac替換成qw
例子
message文件內(nèi)容:hello 123 world
sed -r 's/([a-z]+)( [0-9]+ )([a-z]+)/a/' message 輸出a 因為使用了擴展正則表達式所以要用-r
sed -r 's/([a-z]+)( [0-9]+ )([a-z]+)/\1\2\3/' message 輸出hello 123 world \1表示第一個括號的匹配結果 \2表示第2個括號的匹配結果 \3表示第3個括號的匹配結果
sed -r 's/([a-z]+)( [0-9]+ )([a-z]+)/&/' message 輸出hello 123 world? &表示正則表達式的整個匹配的結構集
sed -r 's/.*/111&222/' message 在message文件中的每行的首尾分別加上111导绷,222
sed 's/i/a/g' message 將message文件中的所有i字符替換成a字符,沒有加g則只將每行第一個i替換a
sed 's/i/a/2'? message 將message文件中的第二行的i字符替換成a字符
sed 's/i/a/w b.txt' message 把message的每行的i替換成a并將替換后的數(shù)據(jù)另存到b.txt文件中
sed 's/g/a/i' message 把message的每行的g或者G替換成a,i表示忽略大小寫
模式空間和保持空間
模式空間初始化為空屎飘,處理王一行后會自動輸出到屏幕并清除模式空間妥曲;保持空間初始化為一個空行,也就是默認帶一個\n,處理完不會自動清除
h:將模式空間內(nèi)容覆蓋到保持空間中
H:將模式空間內(nèi)容追加到保持空間中
g:將保持空間內(nèi)容覆蓋到模式空間
G:將保持空間內(nèi)容追加到模式空間
x:交換模式空間和保持空間的內(nèi)容
例子:
test.txt內(nèi)容
11111
22222
33333
44444
sed '{1h;2,3H;4G}' test.txt 輸出
11111
22222
33333
44444
11111
22222
33333
解釋:將模式空間的第一行替換保持空間的第一行,將模式空間的2到3行追加到保持空間钦购,然后將保持空間的內(nèi)容追加到模式空間并打印輸出
高級子命令
n:讀入下一行到模式空間檐盟,例:’4{n;d}’ 刪除第5行。
N:追加下一行到模式空間押桃,再把當前行和下一行同時應用后面的命令葵萎。
P:輸出多行模式空間的第一部分,直到第一個嵌入的換行符位置唱凯。在執(zhí)行完腳本的最后一個命令之后羡忘,模式空間的內(nèi)容自動輸出。P命令經(jīng)常出現(xiàn)在N命令之后和D命令之前波丰。
D:刪除模式空間中第一個換行符的內(nèi)容壳坪。它不會導致讀入新的輸入行,相反掰烟,它返回到腳本的頂端爽蝴,將這些指令應用與模式空間剩余的內(nèi)容。這3個命令能建立一個輸入纫骑、輸出循環(huán)蝎亚,用來維護兩行模式空間,但是一次只輸出一行先馆。