sed自帶行編輯器,系統默認行爲。 sed用法: sed [option].. 'script' inputfile... 經常使用選項: -n:不輸出模式空間內容到屏幕,即不自動打印 -e:多點編輯 -f: /PATH/SCRIPT_FILE:從指定文件讀取編輯腳本 -r:支持使用擴展正則表達式 -i:.bak:備份文件並原處編輯 scipt:「地址命令」 sed工具: 地址定界: 一、不給地址:對全文進行處理 二、單地址: #:指定的行,$:最後一行 /pattern/:被此處模式所能匹配到的每一行 三、地址範圍: #,# #,+# /pat1/,/pat2/ #,/pat1/ 四、~:步進 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 打印整個模式空間的內容。其餘的對模式空間,沒啥影響了