7 sed

 

linux的文本流編輯器,它基本上對輸入流中的每一行進行處理,能夠指定處理條件,如替換刪除等,默認是以標準輸出做爲輸出,不會改動原文件。linux

0000 0000git

若是執行簡單的打印文件而不進行任何處理,此時要使用-e ,以下正則表達式

這裏比較坑的地方在於說參數-e是省不了的,而-e的意思是要對每一行的內容執行相應內容,它後邊要跟幾個字符串,能夠引號也能夠不引,可是必須有個東西,否則會把文件名bash

當成是要執行的內容,就出錯了;less

0000 0001編輯器

上面那種狀況基本不會有人使用,真想打印文件內容大能夠用cat less more等,使用sed顯示感受彷佛是腦子被殭屍吃了;若是是對文本內容進行編輯,可使用-e:this

以上內容的意思是對當前行的內容中,找到ee並替換爲ff,引號中s的意思是執行替換,且三個斜槓都要有,這裏的斜槓也能夠換成任意別的標識符,但要統一替換;能夠看到只有一個ee被替換成了ff,由於默認它只對每一行第一個符合的操做,若是想所有替換,要在最後一個斜槓後邊加g,相似於vi中的編輯;3d

-e能夠執行多條命令,有兩種方式:blog

  a)每一個命令都有一個-e,如:字符串

  

  能夠看到第一個-e把每行中第一個'ee'換成了'ff',而第二個-e則把每行中全部'aa'換成了'bb';可是要注意,有時候這些操做之間是會有影響的,有前後順序的講究;

  b)在一個引號中包括所有命令,可是各個內容須要有分好分開:

 

  如上圖,全部命令放在了同一個""中,可是互相之間有分號隔開,同時命令的最後一條是q,表明退出的意思,它只打印了一行,覺得對第一行操做時最後一個命令是q,它退出來了,因此後續行將再也不操做,能夠看到它們之間有影響;

 

0000 0010

正常狀況下,它會讀取一行內容,而後對當前行內容操做後打印,若是不想打印出來,可使用-n選項

從上圖能夠看到,正常狀況下若是不適用-n,則會把當前行內容打印,再把符合要求的打印;而若是使用了-n,則只打印符合要求的(p表示打印的意思),這比較適合尋找符合要求的內容;

 

0000 0011

若是想把相應的字符進行替換,相似於tr,則須要使用y:

能夠看到全部的小寫abc均都換成了ABC;

 

0000 0100

sed會把內容都輸出到標準輸出上,若是想輸入到一個文件中保存,可使用w:

如上圖,使用了w後,處理的內容被保存到了a文件中;

0000 0101

若是想把一行或者若干行內容刪除,則使用d,且須要告訴刪除的是哪些行:

能夠看到第一行到第三行的內容都被刪除了,這裏的'1,3'表示從第一行到第三行,若是是刪除從第一行到最後一行則使用:

sed '1,$d' example

  若是是刪除一行,如第二行則使用:

sed '2d' example

  若是是對符合要求的如找到了匹配的內容刪除,則使用:

sed '/aa/d' example; #刪除包含aa的內容
sed '/^$/d' example; #刪除空行

  從以上能夠看到,它支持基本的正則表達式。

 

0000 0110 

固然能夠在行的前面或者後邊插入內容,當前面插入時是真的插入,使用i:

以上命令中,第一條是在第一行前面插入hello world,沒毛病,第二條的意思是若是一行中包含abc,則在當前行插入hello world;

若是是追加則須要使用a:

基本內容同上。

 

0000 0111

也能夠進行多行內容的替換,使用c:

以上內容把1-4行內容換成了hello world,這裏也可使用d來實現,如上面的結果可使用如下代碼實現:

sed -e "1,4d" example

0000 1000

固然能夠對原文件直接操做,這時候比較危險,不建議,可是有時候確實須要這麼幹,則使用-i選項:

能夠看到沒有輸出,而原來的example中的內容變化了。

 

0000 1001 

能夠提早把-e中使用的命令寫入到一個文件中,而後導入這些命令,使用-f選項:

能夠看到把內容保存在了what文件中,使用-f從what讀取執行與直接輸入沒有區別;

0000 1010

固然總有時候你須要正則查詢並且後邊的處理還要用到這個查詢結果,這時候須要使用&:

從以上能夠看到,&匹配了前邊正則找到的單詞;

也可使用\1 \2等,分別表示匹配到的第一個、第二個等等:

echo this is digit 77 in a number | sed 's/digit \([0-9]\)/\1/'

 

0000 1011

若是讀取到一行,想直接處理下一行,則使用n,以打印偶數行爲例,能夠執行:

相關文章
相關標籤/搜索