1. 程式人生 > >shell中sed命令的用法

shell中sed命令的用法

直接 添加 不支持 sed命令 交互 擴展正則 每一個 shel 編輯

sed (stream editor)流編輯器也是linux中的一條命令,在shell中經常需要用到的非交互式修改文件內容的命令。sed處理文本是按行處理,也就是讀一行處理一行。
sed的命令基本格式是:
sed 選項 ‘編輯指令‘ 文件路徑
也可以通過管道(|)傳輸參數給sed處理 前置命令 | sed 選項 ‘編輯指令‘


sed的常用參數有:
-n 屏蔽默認輸出;如果不加-n選項會全部輸出文本滿足條件的行再重復輸出
-r 如果使用擴展正則,則需要添加-r選項,默認不支持擴展正則,只支持標準正則
-i 直接修改源文件;不加-i只會在屏幕臨時輸出不會修改源文件,一般測試過命令無誤才會在腳本中使用-i選項

sed的編輯指令:

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的內容

shell中sed命令的用法