文本三劍客之sed
阿新 • • 發佈:2018-09-17
數據 sed som 默認 如果 模式 開始 新的 一行
sed自帶行編輯器,系統默認行為。
sed用法:
sed [option].. ‘script‘ inputfile...
常用選項:
-n:不輸出模式空間內容到屏幕,即不自動打印
-e:多點編輯
-f: /PATH/SCRIPT_FILE:從指定文件讀取編輯腳本
-r:支持使用擴展正則表達式
-i:.bak:備份文件並原處編輯
scipt:“地址命令”
sed工具:
地址定界:
1、不給地址:對全文進行處理
2、單地址:
#:指定的行,$:最後一行
/pattern/:被此處模式所能匹配到的每一行
3、地址範圍:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
4、~:步進
1~2奇數行
2~2偶數行
編輯命令: d:刪除模式空間匹配的行,並立即啟用下一輪循環 p:打印當前模式空間內容,追加到默認輸出之後 a[\]test:在指定行後面追加文本 支持使用\n實現多行追加 i[\]test :在行前插入文本 c[\]test: 替換行為單行或多行文本 w /path/somefile:保存模式匹配的行至指定文件 r /path/somefile:讀取指定文件的文本至模式空間中 匹配到的行後 =:為模式空間中的行打印行號 !:模式空間中匹配行取反處理 s///:查找替換,支持使用其他分隔符,s@@2,s### 替換標記: g:行內全局替換 p:顯示替換成功的行 w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中
sed示例: sed ‘2p‘ /etc/passwd sed -n ‘2p‘ /etc/passwd sed-n ‘1,4p‘ /etc/passwd sed -n ‘/root/p‘ /etc/passwd sed -n ‘2,/root/p‘ /etc/passwd 從2行開始 sed -n ‘/^$/=‘ fle 顯示空行行號 sed -n -e ‘/^$/p‘ -e ‘/^$/=‘ file sed ‘root/a\superman‘ /etc/passwd行後 sed ‘root/i\superman‘ /etc/passwd行前 sed ‘root/c\superman‘ /etc/passwd代替行
sed示例:
sed ‘/^$/d‘ file
sed ‘1,10d‘ file
nl /etc/passwd| sed ‘2,5d‘
nl /etc/passwd| sed ‘2a tea‘
sed ‘s/test/mytest/g‘ example
sed -n ‘s/root/&superman/p‘ /etc/passwd 單詞後
sed -n ‘s/root/superman&/p‘ /etc/passwd單詞前
sed -e ‘s/dog/cat/‘ -e ‘s/hi/lo/‘ pets
sed -i.bak ‘s/dog/cat/g‘ pets
高級編輯命令:
p: 打印模式空間開端至\n內容,並追加到默認輸出之前
h: 把模式空間中的內容覆蓋至保持空間中
H:把模式空間中的內容追加至保持空間中
g: 從保持空間取出數據覆蓋至模式空間
G:從保持空間取出內容追加至模式空間
x:把模式空間中的內容與保持空間中的內容進行互換
n:讀取匹配到的行的下一行覆蓋至模式空間
N:讀取匹配到的行的下一行追加至模式空間
d:刪除模式空間中的行
D:如果模式空間包含換行符,則刪除知道第一個換行符的模式空間中的文本,
並不會讀取新的輸入行,而使用合成的模式空間重新啟動循環。如果模式空間
不包含換行符,則會想發出d命令那樣啟動正常的新循環
sed示例:
sed-n ‘n;p‘ FILE
sed ‘1!G;h;$!d FILE
sed ‘N;D ‘ FILE
sed ‘$!d‘ FILE
sed ‘$!N;$!D‘ FILE
sed ‘G‘ FILE
sed ‘g‘ FILE
sed ‘/^$/d;G‘ FILE
sed ‘n;d‘ FILE
sed -n ‘1!G;h;$p‘ FILE
命令
用法
N
讀取新的輸入行,並將該行追加到模式空間現有內容之後,來創建多行模式空間。創建後的多行模式空間中,原有內容和新內容用換行符"\n"來分割。
而執行N命令之後,將會繼續執行,N之後的命令,N之後命令的對象則是我們新的模式空間的內容。
註意:多行模式空間中,^匹配整個空間的開始,$匹配整個空間的結尾,
比如上面的 1\n2\n3 開頭是1,結尾是3
$!N,最後一行,不執行N命令
D
刪除模式空間中,從頭開始到第一個嵌入的換行符為止。
它並不會導致新行的輸入,而是會返回腳本的頂端,將這些指令應用於空間中剩余的內容
P
輸出模式空間中,從頭開始到第一個嵌入的換行符為止。
實際運用中,P經常放到N之後,P之前
n
輸出當前模式空間的內容,讀取下一行替換當前行,替換之後,n命令之後的命令作用到新行上
d
情況模式空間,並導致新行的讀入,此時控制將忽略d之後的命令,並轉移到腳本的頂端,作用在新的輸入行上
p
打印整個模式空間的內容。其他的對模式空間,沒啥影響了
文本三劍客之sed