sed (stream editor)流編輯器也是linux中的一條命令,在shell中常常須要用到的非交互式修改文件內容的命令。sed處理文本是按行處理,也就是讀一行處理一行。
sed的命令基本格式是:
sed 選項 '編輯指令' 文件路徑
也能夠經過管道(|)傳輸參數給sed處理 前置命令 | sed 選項 '編輯指令'linux
sed的經常使用參數有:
-n 屏蔽默認輸出;若是不加-n選項會所有輸出文本知足條件的行再重複輸出
-r 若是使用擴展正則,則須要添加-r選項,默認不支持擴展正則,只支持標準正則
-i 直接修改源文件;不加-i只會在屏幕臨時輸出不會修改源文件,通常測試過命令無誤纔會在腳本中使用-i選項
sed的編輯指令:shell
p 輸出
命令 |
完整示例 |
說明 |
p |
sed -n 'p' 1.txt |
輸出1.txt的全部行 |
2p |
sed -n '2p' 1.txt |
輸出1.txt的第二行 |
2,5p |
sed -n '2,5p' 1.txt |
輸出1.txt的第二行到第五行 |
2,+5p |
sed -n '2,+5p' 1.txt |
輸出1.txt的第二行和第二行之後的5行 |
1~2p |
sed -n '1~2p' 1.txt |
輸出第一行,每隔兩行輸出一行,也就是輸出奇數行 |
2~2p |
sed -n '1~2p' 1.txt |
輸出第二行,每隔兩行輸出一行,也就是輸出偶數數行 |
/正則/p |
sed -n '/^[0-9]/p' 1.txt |
輸出1.txt以數字開頭的行 |
$= |
sed -n '$=' 1.txt |
輸出1.txt的行數 |
d 刪除
命令 |
完整示例 |
說明 |
2d |
sed '2d' 1.txt |
刪除1.txt的第二行 |
2,5d |
sed '2,5d' 1.txt |
刪除1.txt的第二行到第五行 |
2,+5d |
sed '2,+5d' 1.txt |
刪除1.txt的第二行和第二行之後的5行 |
$d |
sed '$d' 1.txt |
刪除1.txt的最後一行行 |
/正則/ |
sed '/^[0-9]/d' 1.txt |
刪除以數字開始的行 |
! |
sed '/^[0-9]/!d' 1.txt |
刪除不是以數字開頭的行 |
^$ |
sed '^$' 1.txt |
刪除1.txt的空行 |
s 替換
命令 |
完整示例 |
說明 |
s/old/new/ |
sed 's/old/new/' 1.txt |
刪除1.txt中每行的第一個old都替換成new |
s/old/new/2 |
sed 's/old/new/' 1.txt |
刪除1.txt中每行的第二個old都替換成new |
s/old/new/g |
sed 's/old/new/g' 1.txt |
刪除1.txt中每行的每個old都替換成new |
s/old// |
sed 's/old//' 1.txt |
刪除1.txt中每行的第一個old都替換成空也就是把old刪除 |
s/old/&s/ |
sed 's/old/&s/' 1.txt |
刪除1.txt中每行的第一個old都替換成olds &表明前面查找的字符串 |
4,7s/^/#/ |
sed '4,7s/^/#/' 1.txt |
刪除1.txt中4-7行開頭加上# 也就是批量添加註釋 |
4,7s/^#an/an/ |
sed '4,7s/^#an/an/' 1.txt |
刪除1.txt中4-7行以#an開頭的行去掉# |
替換中s///能夠用其餘三個相同的符號代替如s### s&&& s999 均可以 這樣的符號在替換路徑的時候常常用到 編輯器
i/a/c插入
命令 |
完整示例 |
說明 |
行號 i |
sed '2i123' 1.txt |
在1.txt的第二行前面插入123 |
正則 i |
sed '/^[0-9]/i123' 1.txt |
在1.txt中全部數字開頭的行前面插入123 |
a |
在行後插入 |
命令格式和i相同 |
c |
替換該行 |
命令格式和i相同 |
sed高級應用
命令 |
完整示例 |
說明 |
行號r |
sed -i '2r 2.txt' 1.txt |
在1.txt中第二行後面插入2.txt的內容 |
行號,行號r |
sed -i '2,5r 2.txt' 1.txt |
在1.txt中第二行到第五行每行後面插入一遍2.txt的內容 |
/正則/r |
sed -i '/^[0-9]/r 2.txt' 1.txt |
在1.txt中以數字開頭的行後每行面插入一遍2.txt的內容 |
w |
sed '2w 3.txt' 1.txt |
在1.txt中第二行導出爲3.txt的內容 |
w |
sed '2,5w 3.txt' 1.txt |
在1.txt中第二行到第五行導出3.txt的內容 |
/正則/r |
sed -i '/^[0-9]/w 2.txt' 1.txt |
在1.txt中以數字開頭的行導出爲3.txt的內容 |