文本處理工具sed
阿新 • • 發佈:2018-07-10
tab 要求 fault oot stream 修飾 第一個 editor pre sed:stream Editor流編輯器,默認不編輯原文件,僅對模式空間中的數據做處理;而後,處理結束後,將模式空間打印至屏幕。
語法:
語法:
sed [option] ‘AddressCommand‘ file1 file2...
option選項有:
-n :靜默模式,不再顯示模式空間的內容
-i :直接修改源文件
-r :使用擴展正則表達式
Address常用的匹配範圍:
1、startLine,endLine 如:1,100 表示從第一行到100行,$表示最後一行 2、/RegEXP/ 正則匹配,將匹配到的行顯示出來 如:/root/ 將匹配到有root的行顯示 3、/pattern1/,/pattern2/,從第一次匹配到pattern1開始到匹配到pattern2的行結束的中間的行 4、LineNumber匹配指定的行 5、startLine,+N,從startLine開始,往後的N行
command常用命令
d:刪除匹配到的行 p:顯示符合條件的行 a \string :在匹配當的行後面追加string的內容 i \string : 在匹配當的行前面添加string的內容 r file :將file文件的內容添加到匹配到的行出 w file :將匹配到的行添加到file文件中 s/pattern/string/修飾符 :將匹配到的pattern替換成string,默認是替換第一個被匹配到的 常用的修飾符有: i :忽略大小寫 g :全局替換
如:
1、刪除/etc/grub.conf文件中行首的空白符;
sed -r ‘s@^[[:spapce:]]+@@g‘ /etc/grub.conf
2、替換/etc/inittab文件中"id:3:initdefault:"一行中的數字為5;
sed ‘s@\(id:\)[0-9]\(:initdefault:\)@\15\2@g‘ /etc/inittab
3、刪除/etc/inittab文件中的空白行;
sed ‘/^$/d‘ /etc/inittab
4、刪除/etc/inittab文件中開頭的#號;
sed -r ‘s@^#@@g‘ /etc/inittab
5、刪除某文件中開頭的#號及後面的空白字符,但要求#號後面必須有空白字符;
sed -r ‘s@^#[[:space:]]+@@g‘ /etc/inittab
6、刪除某文件中以空白字符開頭後面跟#類的行中的開頭的空白字符及#號
sed -r ‘s@^[[:space:]]+#@@g‘ /etc/inittab
7、取出一個文件路徑的目錄名稱;如取出/etc/inittab文件的目錄,即/etc
##echo "/etc/rc.d/" | sed -r ‘s@^(/.*/)[^/]+/?@\1@g‘
echo ‘/etc/inittab‘ | sed -r ‘s#^(/.*)/(.*)#\1#‘
基名/文件名:
echo "/etc/rc.d/" | sed -r ‘s@^/.*/([^/]+)/?@\1@g‘
echo ‘/etc/inittab‘ | sed -r ‘s#^(/.*)/(.*)#\2#‘
需要註意的是,如果要替換原文見的內容要加 -i 參數,sed 中的///,可以使用###或@@@等字符代替。
p的 command參數也要註意下,匹配到的行將會顯示兩次,沒匹配到的顯示一次,如果顯示兩次的,第一次是 p的的作用將匹配到的行打印出來,第二次是sed命令的作用,會將模式空間的內容顯示出來,所以說沒匹配到的也會顯示一次,如果想只顯示一次可以加 -n 參數,那麽sed命令中模式空間的內容不顯示。
文本處理工具sed