sed是一種流編輯器,它是文本處理中非常中的工具,能夠完美的配合正則表達式使用,功能不同凡響。處理時,把當前處理的行存儲在臨時緩衝區中,稱爲"模式空間"(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,這樣不斷重複,直到文件末尾。文件內容並沒有 改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件,簡化對文件的反覆操作;編寫轉換程序等。
一些基礎練習見sed命令基礎2
用法:
sed [option] script inputfile
常用的option:
-n:不輸出模式空間的內容到屏幕
-e:多點編輯
-f /path/script_file:從指定文件中讀取編輯腳本
-r:支持使用擴展的正則表達式
-i[.bak] [備份文件並]原處編輯
script:
地址定界;命令
常用命令:
d:刪除模式空間的行並立即啓動下一輪循環
p:打印當前模式空間的內容,並追加到默認輸出之後
a[\]text:在指定行後面追加文本支持使用\n進行多行追加
i[\]text:在行前插入文本
c[\]text:替換行爲單行或多行文本
w /path/file/:保存模式空間匹配的行至指定文件
r /path/file:讀取指定文件的文本至模式空間中匹配到的行後
=:爲模式空間中的行打印行號
!:模式空間中匹配行取反處理
地址定界:
- 如果不給地址,則對全文逐行進行處理
- 單地址:
/pattern/:被此處模式匹配的每一行(關鍵字,正則)
3. 地址範圍:
N,M:指定處理從N行到M行
N,+M:指定處理從N行到N+M行
/pat1/,/pat2/:指定處理從有第一個/pat1/到第二個/pat2/的行
N,/pat1/:指定處理從N行到匹配/pat1/的行
4. ~:步進處理
1~2:處理奇數行
2~2:處理偶數行
查找替換模式:
s/匹配內容/替換內容/[g|p|w]
支持替換,支持使用其他分隔符,如:s@@@ s###等
替換標記:
g:行內全局替換
p:顯示替換成功的行
w /path/file:將替換成功的行保存到文件
接下來我們舉例說明使用方法:
在我們下列的演示中,只要不加-i選項,都只是將修改的數據打印咋屏幕上,並不是直接修改源文件
刪除某行
sed "3,5d" /etc/passwd
sed "\$d" /etc/passwd
sed "1~2d" /etc/passwd
顯示某行
sed -n "2,5p" /etc/passwd
sed -n -e "3,/root/=" -e "3,/root/p" /etc/passwd
sed -n "/root/,5p" /etc/passwd
添加某行
sed '/root/a\superman' /etc/passwd行後
sed '/root/i\superman' /etc/passwd 行前
sed "1,3a\HELLO" /etc/passwd
替換某行
sed '/root/c\superman' /etc/passwd 代替行
sed '/root/c\superman\nHello\nChinese' /etc/passwd
替換一行的某一部分
sed "1,20s/root/HEHEHE/g" /etc/passwd
sed -n "/nologin/s/nologin/READ/gp" /etc/passwd