Sed基本用法
Sed:Stream Editor
行編輯器 (全屏編輯器:vi)
模式空間
sed 是一種在線編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩衝區中,稱爲“模式空間”(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,這樣不斷重複,直到文件末尾。文件內容並沒有改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反覆操作。
語法:
sed [options] ‘AddressCommand’ file...
Option選項
-n :靜默模式。 不顯示模式空間,不再默認顯示模式空間中的內容。
-i : 可以修改源文件
-e:支持同時多個操作
-f: 指定文件讀取(script腳本)
-r:使用擴展正則表達式
Address: 地址定界
1.startLine,EndLine
比如1,100
2.使用模式 /RegExp/
/^root/
3./pattern/,/pattern/
第一次被pattern匹配到的行開始,至第一次被pattern2匹配到的行結束,這中間的所有行。
4.Linenumber
精確的行
最後一行 $
倒數第二行 $ - 1
5.StartLine,+N
從startLine開始,向後N行
Command:
刪除:d命令
$ sed '2d' example-----刪除example文件的第二行。
$ sed '2,$d' example-----刪除example文件的第二行到末尾所有行。
$ sed '$d' example-----刪除example文件的最後一行。
$ sed '/test/'d example-----刪除example文件所有包含test的行。
顯示:p命令:
顯示符合條件的行
sed ‘/^\//p’ /etc/fstab
新增:a命令
在指定的行後面追加新行,內容爲指定的字符串。 \n 換行
sed ‘/^\//a \# hello world’ /etc/fstab
sed ‘/^\//a \# hello world\n#hello,linux’ /etc/fstab
i 命令
在指定的行前面追加新行,內容爲指定的字符串。
r命令
將指定的文件內容添加到符合條件的行處。
sed ‘2r /etc/issue’ /etc/fstab
sed ‘1,2r /etc/issue’ /etc/fstab
w命令
將指定範圍內的內容另存只指定的文件中。
sed -n ‘/oot/w /tmp/oot.txt’ /etc/fstab
替換:s命令
s/pattern/string/修飾符 默認只替換每行中第一次被模式匹配到的串。
修飾符 -g 全局替換
-i 查找時忽略字母大小寫
$ sed 's/test/mytest/g' example
-----在整行範圍內把test替換爲mytest。如果沒有g標記,則只有每行第一個匹配的test被替換成mytest。
$ sed -n 's/^test/mytest/p' example
-----(-n)選項和p標誌一起使用表示只打印那些發生替換的行。也就是說,如果某一行開頭的test被替換成mytest,就打印它。
$ sed 's/^192.168.0.1/&localhost/' example
-----&符號表示替換換字符串中被找到的部份。所有以192.168.0.1開頭的行都會被替換成它自已加 localhost,變成192.168.0.1localhost。
$ sed -n 's/\(love\)able/\1rs/p' example
-----love被標記爲1,所有loveable會被替換成lovers,而且替換的行會被打印出來。
$ sed 's#10#100#g' example
-----不論什麼字符,緊跟着s命令的都被認爲是新的分隔符,所以,“#”在這裏是分隔符,代替了默認的“/”分隔符。表示把所有10替換成100。
或者也可用@
只能用後項引用,而不能使用&的場合:
sed ‘s#l\(..e\)#L\1#g’ sed.txt 說明:like----->Like
Sed練習
1.刪除/etc/grub.conf文件中行首的空白符。
sed -r ‘s@^[[:space:]]+@@g’ /etc/grub.conf
2.替換/etc/inittab文件中”id:3:initdefault:”一行中的數字爲5;
sed ‘s@\(id:\)[0-9]\(:initfault:\)@\15\2@g’ /etc/inittab
3.刪除/etc/inittab文件中的空白行
sed ‘/^$/d’ /etc/inittab
4.刪除/etc/inittab文件開頭的#號
sed ‘s@^#@@g’ /etc/inittab
5.刪除某文件中開頭的#號及後面的空白字符,但要求#號後面必須有空白字符。
sed -r ‘s@^#[[:space:]]+@@g’ /etc/inittab
6.刪除某文件中意空白字符後面跟#類的行中的開頭的空白字符及#
sed -r ‘s@^[[:space:]]+#@@g’ /etc/inittab
7.取出一個文件路徑的目錄名稱;
目錄名:echo “/etc/rc.d” | sed -r ‘s@^(/.*/)[^/]+/?@\1@g”
基名:echo “/etc/rc.d” | sed -r ‘s@^/.*/([^/]+)/?@\1@g”