1. 程式人生 > 其它 >三劍客之sed編輯器 基操

三劍客之sed編輯器 基操

目錄:

一、sed編輯器

二、列印內容

三、使用地址

四、刪除行

五、替換

六、插入

一、sed編輯器

sed是一種流編輯器,流編輯器會在編輯器處理資料之前基於預先提供的一組規則來編輯資料流。

sed編輯器可以根據命令來處理資料流中的資料,這些命令要麼從命令列中輸入,要麼儲存在一個命令文字檔案中。 sed 的工作流程主要包括讀取、執行和顯示三個過程∶

  • 讀取∶ sed 從輸入流(檔案、管道、標準輸入)中讀取一行內容並存儲到臨時的緩衝區中(又稱模式空間, pattern space)。
  • 執行:預設情況,下,所有的sed 命令都在模式空間中順序地執行,除非指定了行的地t址, 否貝Ised 命令將會在所有的行上依次執行。
  • 顯示∶傳送修改後的內容到輸出流。在傳送資料後,模式空間將會被清空。在所有的檔案內容都被處理完成之前, 上述過程將重複執行,直至所有內容被處理完。

在所有的檔案內容都被處理完成之前,上述過程將重複執行, 直至所有內容被處理完。

注意:預設情況下所有的sed命令都是在模式空間內執行的,因此輸入的檔案並不會發生任何變化,除非是用重定向儲存輸出。

命令格式∶

1 sed -e  '操作'  檔案1 檔案2
2 sed -n -e  '操作'  檔案1 檔案2
3 sed -f  指令碼檔案 檔案1 檔案2
4 sed -i -e   '操作'  檔案1 檔案2

sed -e 'n{
操作1
操作2
...
}’ 檔案1 檔案2 ...

常用選項∶

  • -e 或--expression=∶ 表示用指定命令來處理輸入的文字檔案,只有一個操作命令時可省略,一般在執行多個操作命令使用
  • -f 或--file=: 表示用指定的指令碼檔案來處理輸入的文字檔案。
  • -h 或--help∶顯示幫助。
  • -n、--quiet 或 silent∶禁止sed編輯器輸出,但可以與p命令一起使用完成輸出。
  • -i∶直接修改目標文字檔案。

常用操作∶

  • s∶替換,替換指定字元。
  • d∶刪除,刪除選定的行。
  • a∶增加,在當前行下面增加一行指定內容。
  • i∶插入,在選定行上面插入一行指定內容。
  • c∶替換,將選定行替換為指定內容。
  • y∶ 字元轉換,轉換前後的字元長度必須相同。
  • p∶ 列印,如果同時指定行,表示列印指定行;如果不指定行,則表示列印所有內容;如果有非列印字元,則以 ASCII碼輸出。其通常與"-n"選項一起使用。
  • =∶列印行號。
  • l(小寫L)∶ 列印資料流中的文字和不可列印的ASCII字元(比如結束符s、製表符\t)

二、列印內容

sed -n- e 'p' testfile1
sed -n -e '=' testfile1
sed -n -e 'l' testfile1
sed--n -e '=;p' testfile1
sed -n -e '=' -e 'p' testfile1
sed -n '
> =
> p
> ' testfile1

  

三、使用地址

sed編輯器有2種定址方式:

  • 以數字形式表示行區間
  • 用文字模式來過濾出行
1 sed -n '1p' testfile1  #列印第一行
2 
3 sed -n '$p' testfile1   #列印最後一行
4 
5 sed -n '1, 3p' testfile1    #列印一到三行
6 
7 sed -n '3, $p' testfilel     #列印三行到最後一行
8 
9 sed -n '1, +3p' testfilel   #列印1之後的連續3行,即1-4行
sed '5q' testfile1         #列印前5行資訊後退出,q表示退出

sed -n 'p;n' testfile1     #列印奇數行; n表示移動到下一行

sed -n 'n;p' testfile1     #列印偶數行
 1 sed -n '/user/p' /etc/passwd
 2 
 3 sed -n '/^a/p' /etc/passwd
 4 
 5 sed -n '/bash$/p' /etc/passwd 
 6 
 7 sed -n '/ ftp\|root/p' /etc/passwd
 8 
 9 sed -n '2, /nobody/p' /etc/passwd
10 
11 sed -n '2, /nobody/=' /etc/passwd
12 
13 sed -nr '/ro{1, }t/p' /etc/passwd     #-r表示支援擴充套件正則表示式

四、刪除行

1 sed 'd' testfile1    #全刪
2 
3 sed '3d' testfile1
4 
5 sed '2, 4d' testfile1
6  
7 sed '$d' testfile1
8 
9 sed '/^$/d' testfile1   #刪除空行
sed '/nologin$/d' /etc/passwd      #刪除包含nologin字元的行
sed '/nologin$/!d' /etc/passwd     #不刪除包含nologin的行
sed '/2/,/3/d' testfile2    #從第一-個位置開啟行刪除功能,到第二個位置關閉行刪除功能
sed '/1/,/3/d' testfile2

五、替換

行範圍 s/舊字串/新字串/替換標記

4種替換標記:

• 數字:表明新字串將替換第幾處匹配的地方

• g:表明新字串將會替換所有匹配的地方

• P:列印與替換命令匹配的行,與-n一起使用

• w檔案:將替換的結果寫到檔案中

sed -n 's/root/mq/p' /etc/passwd    #將匹配行的第一個root更改為mq
sed -n 's/root/mq/2p' /etc/passwd     #將匹配行的第二個root更改為mq
sed -n 's/root/mq/gp' /etc/passwd   #將匹配行的所有root更改為mq
sed -ne ‘1,10 s/^/#/p’ -ne ‘1,10 =’ /etc/passwd #1-10行行首新增#號
sed -ne '/^root/ s/$/#/p' /etc/passwd        #在以root開頭的行,行尾新增#號

六、插入

sed '1c 10' 1.txt #第1行,替換為10
sed ‘5i abc’ 1.txt #在第五行,行上插入abc
sed ‘5a abc’ 1.txt #在第五行,行下插入abc
sed -r '5a abc\n123' 1.txt #在第五行行下新增abc和123
sed '5r /etc/resolv.conf' 1.txt  #在第五行後匯入該檔案內容  r代表讀取 
sed ‘/3/{H;d};$G’ 1.txt #將包含3的行剪下到末尾,H表示複製到剪下板,G表示貼上到指定行後
sed ‘/3/{H};$G’ 1.txt