一、sed介紹:
sed是非交互式的編輯器,同時又是面向字符流的,一次處理一行文本。當前輸入的行被緩存至一個被稱為模式空間(pattern space)的內存空間中,與給定的模式進行比對,若不匹配,則將內容輸出至屏幕,之后讀取第二行;若匹配,則執行編輯命令,命令執行完成后,將模式空間中的內容輸出至屏幕(默認行為)。之后再去讀取第二行,再比對,再處理…一直重復到讀取全部的文件內容。
sed同grep、awk一樣,匹配模式支持使用正則表達式。默認支持基本正則表達式,通過指定選項可支持擴展正則表達式。
sed只有在使用特定選項的情況下才會對原文件做修改,當然,這個行為具有破壞性,應該慎用。sed的輸出也可以采用重定向的方式保存至文本中。
二、sed用法:
sed [option]… 'script' inputfile…
script:地址定界編輯命令
1、常用options:
-n :不輸出模式空間中的內容至屏幕。默認情況下,模式空間中的內容會被輸出至屏幕。
-e script: 實現多點編輯。
例:sed -e script1 -e script2 somefile
-r :支持擴展正則表達式。sed默認支持基本正則表達式。
-f /path/to/sed_script_file:從指定文件中讀取編輯腳本來處理文件。
-i :直接編輯原文件,危險操作,慎用。
例:將/etc/fstab拷貝至/tmp,命名為fs1。對比下-n參數的意義。(p命令為顯示模式空間匹配到的內容。)
沒加-n參數,因為默認情況下,模式空間中的內容會被輸出至屏幕。我們又通過p命令讓第三行輸出了一次,所以第三行被輸出了兩次。
看下,加上-n的效果。
2、地址定界
(1)空地址:對全文進行處理
(2)單地址:
#:指定行
/pattern/:被此模式匹配到的每一行。
(3)地址范圍:
m,n:從第m行到第n行
3,9
m,+n:從第#行開始,往后+n行,包含第m行
3,+8
m,/pattern/:從指定的第m行開始,到第一次被pattern匹配的行
/pattern1/,/pattern2/:從第一次被模式1匹配到的行開始,到第一次被模式2匹配到的行結束。
(4)步進:~
1~2:所有奇數行。
2~2:所有偶數行
例2.1:顯示fs1文件的6到10行
例2.2:顯示以#開頭的行到以/dev開頭的行。
它是這樣顯示的:從第一次匹配到#開頭的行開始,到第一次匹配到以/dev開頭的行結束。后面雖然還有以/dev開頭的行,但是匹配也不會進行了。
例2.3:編輯num.txt文件,每行對應1-10中的一個數字,顯示其奇數行和偶數行
3、編輯命令
d:刪除匹配到的行
sed '1,5d' /etc/fstab
sed '/^UUID/d'
p:顯示模式空間中匹配的內容
a \text:(append)在模式匹配到的行后面追加文本,支持使用\n實現多行追加
i \text:(insert)在模式匹配到的行前面插入文本,支持使用\n實現多行插入
sed '3a \new line\nanother new line' /etc/fstab
c \text:把匹配到的行替換為指定的文本
w /path/to/somefile:保存模式匹配到的行至指定的文件中
r /path/to/somefile : 讀取指定為念的內容至被模式匹配到的行處;用于實現文件合并。
= :為被模式匹配到的每一行加上行號,行號會被當作一個新行
! :取反
位于模式之后,命令之前。地址定界!編輯命令
例:sed -n '/^#/!p' /etc/fstab
例3.1:刪除所有以#開頭的行
例3.2:在以/dev開頭的行后加上內容為“alpha”的行
例3.3:在不以/dev開頭的行后面加上內容為“alpha”的行。和上一題對比下結果。
例3.4:讀取/etc/issue的內容,并將其追加至以UUID開頭的行后
例3.5:將以/dev開頭的行的內容替換為“this line has been replaced”
4、查找替換
s///:查找替換,分隔符可自定義,如:s@@@ 或s###。
替換標記:
g:全局替換。s///g
p:顯示替換成功的行
w /path/to/somefile:將替換成功的行保存至指定的文件中。
sed 's@root@&hello@' /etc/passwd:在root單詞后加上hello
sed 's@root@hello&@' /etc/passwd:在root單詞前加上hello
sed –i.bak ‘s/dog/cat/g’ pets :在對pets文件做修改之前,先做備份,本分文件以".bak"結尾
例4.1:在fs1文件中不是以#開頭的行的行首增加#號。
例4.3:利用sed取出給定路徑的基名和目錄名
(1)取基名。需要使用正則表達式中的后向引用
(2)取目錄名
原創文章,作者:M20-1鐘明波,如若轉載,請注明出處:http://www.www58058.com/32267