1. 程式人生 > >文本處理三劍客 sed

文本處理三劍客 sed

rip att AC src ... 功能 範圍 sed工具 edit

sed 處理文本的工具
? Stream EDitor, 行編輯器 (基於行的編輯)

sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在 臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩 沖區中的內容,處理完成後,把緩沖區的內容送往屏幕。然後讀入下行,執行 下一個循環。如果沒有使諸如‘D’的特殊命令,那會在兩個循環之間清空模 式空間,但不會清空保留空間。這樣不斷重復,直到文件末尾。文件內容並沒 有改變,除非你使用重定向存儲輸出。
功能:主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程 序等

sed工具
? 用法:
sed [option]... ‘script‘ inputfile... 
? 常用選項: 
-n:不輸出模式空間內容到屏幕,即不自動打印 
-e: 多點編輯 
-f:/PATH/SCRIPT_FILE: 從指定文件中讀取編輯腳本 
-r: 支持使用擴展正則表達式 
-i.bak: 備份文件並原處編輯 
? script: ‘地址命令‘

sed工具
? 地址定界: 
(1) 不給地址:對全文進行處理 
(2) 單地址: #: 指定的行,$:最後一行 /pattern/:被此處模式所能夠匹配到的每一行 
(3) 地址範圍: #,# #,+# /pat1/,/pat2/ #,/pat1/ 
(4) ~:步進 1~2 奇數行 2~2 偶數行

sed工具
? 編輯命令: 
d: 刪除模式空間匹配的行,並立即啟用下一輪循環 sed  -2d 刪除第二行
p:打印當前模式空間內容,追加到默認輸出之後 
a [\]text:在指定行後面追加文本 支持使用\n實現多行追加 
sed 2a\hello 即在第2行後增加hello一行  (需要“”)
sed “2a\hello\123”即追加兩行  (需要“”)
i [\]text:在行前面插入文本 
sed 2i\hello 即在第2行前增加hello一行  (需要“”)
sed “2i\hello\123”即追加兩行  (需要“”) 也可以多行

c [\]text:替換行為單行或多行文本 
sed 2c\hello 即替換第2行內容顯示hello一行  (需要“”)
sed “2c\hello\123” 即替換第2行內容顯示hello和123兩行 (需要“”) 也可以多行
w /path/somefile: 保存模式匹配的行保存至指定文件 
sed “w /app/haha”將匹配的行保存至指定文件中 (需要“”)
r /path/somefile:讀取指定文件的文本至模式空間中 匹配到的行後 =: 為模式空間中的行打印行號 sed‘=‘
!:模式空間中匹配行取反處理

sed工具
? s///:查找替換,支持使用其它分隔符,s@@@,s###  ‘s/2/3/’把2換成3
? 替換標記: 
g: 行內全局替換    
p: 顯示替換成功的行 
w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中
sed示例
? sed ‘2p’  /etc/passwd    (其他模式空間會默認輸出,即默認打印到屏幕,第2行就會出現2次)
? sed –n ‘2p’ /etc/passwd   (-n其他不輸出,只打印第2行 )
? sed –n ‘1,4p’ /etc/passwd    (打印1到4行)
sed 2d 刪除第2行
sed 2ahello 在第2行後加hello
高級編輯命令
? P:打印模式空間開端至\n內容,並追加到默認輸出之前 
? h: 把模式空間中的內容覆蓋至保持空間中 
? H:把模式空間中的內容追加至保持空間中 
? g: 從保持空間取出數據覆蓋至模式空間 
? G:從保持空間取出內容追加至模式空間 
? x: 把模式空間中的內容與保持空間中的內容進行互換 
? n: 讀取匹配到的行的下一行覆蓋至模式空間 
? N:讀取匹配到的行的下一行追加至模式空間 
? d: 刪除模式空間中的行 
? D:如果模式空間包含換行符,則刪除直到第一個換行符的模式空間中的文本,並不會讀取新的輸 入行,而使用合成的模式空間重新啟動循環。如果模式空間不包含換行符,則會像發出d命令那樣 啟動正常的新循環

sed示例:
seq 19 |sed -n ‘n;p‘ (只打印偶數頁)

技術分享圖片

seq 1 10 | sed ‘1!G;h;$!d‘ (倒序打印)
技術分享圖片
seq 1 10 |sed ‘N;D‘ (打印最後一行)
技術分享圖片
seq 1 10 |sed ‘$!d‘ (打印最後一行)
技術分享圖片
seq 1 10 |sed ‘n;D‘ (打印奇數行)
技術分享圖片
seq 1 10 |sed ‘$!N;$!D‘ (打印最後兩行)
技術分享圖片
seq 1 10|sed ‘G‘ (添加空格)
技術分享圖片
seq 1 10 |sed ‘/^$/d;G‘ (將多空行變為一個空行,沒有空行的加一個空行)
技術分享圖片

文本處理三劍客 sed