一、簡介
sed(Stream EDitor)是一種行編輯器,Linux中有三種常見的行編輯器:gred,sed,awk,其中awk命令最複雜,grep命令最簡單,sed命令難度適中。
sed命令能夠接收一個文件或者管道輸入流,以一次處理一行的方式處理完成整個文檔,能夠接收管道輸入流是sed命令的一個特色功能。
sed命令的詳細使用方法在線手冊:http://www.gnu.org/software/sed/manual/sed.html
sed最全命令格式展開
sed OPTIONS... [SCRIPT] [INPUTFILE...]
其中[SCRIPT]部分是由兩部分組成:Address Command ,其實就是
sed OPTIONS... [Address[Command]] [INPUTFILE...]
二、Options
1. -n 啓用靜默模式。默認sed命令會打印出模式空間中的內容,使用該選項將不再打印。
2. -r 啓用擴展的正則表達式
3. -f script-file 使用腳本文件添加額外的處理文本功能
4. -e script 使用腳本添加額外的處理文本功能
三、Address
Address的作用就是“選擇行(Selecting Lines)”,也就是選定作用範圍。
1.n
選擇指定的某行
2.startline,endline
指定開始行和結束行,比如3,5,指定第三行到第五行的所有行。
3.startline~step
指定開始行以及步長,2~3表示選定從第2行開始每3行直到文件尾部的所有行。
4./RegExp/
指定所有符合正則表達式的行,如果表達式中有/,必須使用\將其轉義:\/
5.$
選定文件最後一行
6.startline,+n
從startline開始,向後的n行
7.startline,~n
從startline開始,向前和向後的n行
四、Command
緊接着Address的是Command,是對選中文本的操作
1.d 刪除符合條件的行
2.p 顯示符合條件的行,該命令一般和-n選項使用
3.a \string 在在指定的行後面添加新行,內容爲string,可以使用\n換行
4.i \string 在指定的行前面添加新行,內容爲string,可以使用\n換行
5.s/regexp/replacement/flags 將匹配到的串替換成爲指定的字符串,分隔符/可以自定義,如果表達式中用到了/需要使用\進行轉義。
flag可以包含
g :全局替換。默認只替換每行的第一個匹配項
i : 忽略字母大小寫
五、練習
1.刪掉/etc/profile文件中行首的所有空白字符
sed -r 's/^[[:space:]]+//g' /etc/profile
分析:刪除一行中的一部分字符使用替換功能,所以使用s命令,-r指定使用擴展的正則表達式。
2.刪除/etc/profile文件中的空白行
sed -r '/^$/d' /etc/profile
刪除行使用命令d,Address使用正則表達式^$匹配,但是需要加上//
3.刪除/etc/profile文件中以#開頭並且後面帶有至少一個空格的字符
sed -r 's/^#[[:space:]]+//g' /etc/profile