shell中sed命令的用法
阿新 • • 發佈:2018-01-29
直接 添加 不支持 sed命令 交互 擴展正則 每一個 shel 編輯 sed (stream editor)流編輯器也是linux中的一條命令,在shell中經常需要用到的非交互式修改文件內容的命令。sed處理文本是按行處理,也就是讀一行處理一行。
sed的命令基本格式是:
sed 選項 ‘編輯指令‘ 文件路徑
也可以通過管道(|)傳輸參數給sed處理 前置命令 | sed 選項 ‘編輯指令‘
sed的編輯指令:
sed的命令基本格式是:
sed 選項 ‘編輯指令‘ 文件路徑
也可以通過管道(|)傳輸參數給sed處理 前置命令 | sed 選項 ‘編輯指令‘
sed的常用參數有:
-n 屏蔽默認輸出;如果不加-n選項會全部輸出文本滿足條件的行再重復輸出
-r 如果使用擴展正則,則需要添加-r選項,默認不支持擴展正則,只支持標準正則
-i 直接修改源文件;不加-i只會在屏幕臨時輸出不會修改源文件,一般測試過命令無誤才會在腳本中使用-i選項
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命令的用法