linux 三大文本處理工具 grep sed awk
之前有說過grep 今天來看看sed指令
簡介
sed (Stream EDitor)流編輯器,是非互動式的編輯器,它一次處理一行内容。而且此編輯器預設不會對原檔案做修改,如果想要修改使用shell重定向儲存結果。預設情況下,所有的輸出行都會被列印在螢幕上。
sed 編輯器逐行處理檔案(或輸入),并将結果發送到螢幕上。處理過程如下:
首先sed 把目前正在處理的行儲存在一個臨時的緩沖區中(也稱為模式空間pattern space),然後處理臨時緩沖區中的行,完成後把該行發送到螢幕上。 sed 每處理完一行就将其緩沖區删除,然後将下一行讀入,進行處理和顯示。處理完輸入檔案的最後一行後,sed便運作結束。sed 每一行都存在臨時緩沖區中,對這個副本進行編輯,是以不會修改原檔案。
sed 基本格式
sed [option] "AddressCommand" file
Address
大義是指定該檔案中的哪一行或者被定位到的行,支援正規則表達式,數字。如果沒有指定行,則預設為處理所有行。
startlike,endline 例
1,100 則定位到文本中的第一行到100行
$ 表示最後一行
$-1 表示倒數第二行
2. /RegExp/ 中間是正規則表達式 例
/^root/ 比對以root開頭的行
3. /pattern/,/pattern2/ 比對從第一次被pattern1比對到的行,到第一次被pattern2比對到的行結束這中間的所有行
4. LineNumber 隻給一個數字,則精确比對到該行
5. startline,+N N是數字 表示從startline 行開始向後比對N行。
Command
這個是對前邊所比對到的行做字處理 ,比如删除,修改,替換等等
d 删除符合條件的行
a \"string" 可不加引号, 在符合條件的行的後面追加新行,内容為string. \n 是換行符
i \"string" 可不加引号, 在符合條件的行的前面追加新行,内容為string. string 的意思是這個地方你輸出什麼,則為該行後邊添加什麼。
p 顯示符合條件的行,預設情況下會使符合的行數顯示兩次(這個是因為patter space的原因)
r FILE 将指定的檔案的内容添加到符合條件的行處
w FILE 将位址指定的範圍内的的行另存至指定的檔案中
s/parttern/string/ 查找和替換 替換預設隻替換每行中被第一次模式比對到的字元串
如果都把模式比對到的都替換需加修飾符
g 表示全局替換(global)
i 忽略大小寫 ignore
s/// 分隔符可用其它特殊字元替換如 s@@@ s###
&表示引用前邊模式比對中的字元串
\(\) 後向引用
[option]
這個是可選選項,即可用也可以不用這個選項
-n 靜默模式,不再預設顯示模式空間中的内容。
-i 直接修改原檔案
-e 可以同時執行多個腳本
即sed -e "AddressCommand" -e "AddressCommand" -e "AddressCommand" File
-f FILE 把sed腳本執行到指定的檔案
-r 表示使用擴充正規表達式
sed 練習
1. 删除/etc/grub.conf檔案中行首的空白字元
sed 's/^[[:space:]]*//' /etc/grub.conf
2. 替換/etc/inittab檔案中“id:3:initdefault:“一行中的數字為5
sed 's/\(id:\)3/\15/' /etc/inittab
3. 删除/etc/inittab檔案中的空白行(由于我linux系統是由#加空白字元組成的行是以我的是删除#開頭整行空白的行)
sed '/^#[[:space:]]*$/d' /etc/inittab
4. 删除/etc/inittab檔案中開頭的$号
sed 's/^#//' /etc/inittab
5. 删除某檔案中開頭的$号以及後面的空白字元,但要求#号後面必須有空白字元的才删除
sed 's/^#[[:space:]]//' PATH
本文轉自Winthcloud部落格51CTO部落格,原文連結http://blog.51cto.com/winthcloud/1629995如需轉載請自行聯系原作者
Winthcloud