sed 編輯器

將不斷補充,優化修改

1、sed編輯器

sed是一種流編輯器,流編輯器會在編輯器處理數據以前基於預先提供的一組規則來編輯數據流。正則表達式

一、sed編輯器工做流程

 sed編輯器能夠根據命令來處理數據流中的數據,這些命令要麼從命令行中輸入,要麼存儲在一個命令文本文件中。express

 sed的工做流程主要包括讀取、執行和顯示三個過程:bash

  1. 讀取: sed從輸入流 (文件、管道、標準輸入) 中讀取一行內容並存儲到臨時的緩衝區中(又稱模式空間,pattern space)
  2. 執行:默認狀況下,全部的sed命令都在模式空間中順序地執行,除非指定了行的地址,不然sed命令將會在全部的行上依次執行。
  3. 顯示:發送修改後的內容到輸出流。在發送數據後,模式空間將會被清空。在全部的文件內容都被處理完成以前,上述過程將重複執行,直至全部內容被處理完。

在全部的文件內容都被處理完成以前,上述過程將重複執行,直至全部內容被處理完。
注意:默認狀況下全部的sed命令都是在模式空間內執行的,所以輸入的文件並不會發生任何變化,除非是用重定向存儲輸出。編輯器

二、sed命令格式

命令格式:優化

sed -e'格式' 文件1 文件2 ...ui

sed -n -e ‘操做’ 文件1 文件2 ...
sed -f 腳本文件 文件1 文件2 ...
sed -i -e '操做' 文件1 文件2 ...
 
 
sed -e ' n {
操做1
操做2
...
} ' 文件1 文件2

三、經常使用選項

-e或- -expression=: 表示用指定命令來處理輸入的文本文件,只有一個操做命令時可省略,一 般在執行多個操做命令使用spa

f或- -file=: 表示用指定的腳本文件來處理輸入的文本文件。命令行

h或- -help: 顯示幫助。3d

-n、- -quiet或silent:禁止sed編輯器輸出,但能夠與p命令一塊兒使用完成輸出。code

-i: 直接修改目標文本文件。

 

 

 

 

 兩個命令相同但下面這個加個-e

 

 

四、經常使用操做

s:替換,替換指定字符。

d:刪除,刪除選定的行。

a:增長,在當前行下面增長一行指定內容。

i:插入,在選定行,上面插入一行指定內容。

c: 替換,將選定行替換爲指定內容。

y:字符轉換,轉換先後的字符長度必須相同。

p: 打印,若是同時指定行,表示打印指定行;若是不指定行,則表示打印全部內容;若是有非打印字符,則以ASCII碼輸出。其一般與「-n」選項一塊兒使用

1
2
3
4
5
6
[root@localhost d3]#sed -n 'p'   abc.txt
one
two
three
four
five

=: 打印行號

1
2
3
4
5
6
[root@localhost d3]#sed -n '='  abc.txt
1
2
3
4
5

 l (小寫L):打印數據流中的文本和不可打印的ASCII字符(好比結束符$、製表符\t)

1
2
3
4
5
6
[root@localhost d3]#sed -n 'l'  abc.txt
one$
two$
three$
four$
five$

五、使用地址尋找

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

  1. 以數字形式表示行區間
  2. 用文本模式來過濾出行

 

 

1
sed -n '1p'  abc.txt        #打印第一行

  

 

1
sed -n '$p'  abc.txt        #打印最後一行

1
sed -n '1,3p'  abc.txt      #打印一到三行

1
sed -n '3,$p'  abc.txt      #打印三到最後一行

1
sed -n '1, +3p'  abc.txt    #打印1以後的連續3行,即1-4行

1
sed '3q'  abc.txt           #打印前3行信息後退出,q表示退出

1
sed -n 'p;n'  abc.txt       #打印奇數行; n表示移動到下一行

1
sed -n 'n;p'  abc.txt       #打印偶數行

1
sed -n '2,${n;p}'  abc.txt       #從第二行開始,n移動下一行,p打印,表示打印奇數行

1
sed -n ' /user/p'  /etc/passwd    # //搜索包含user的行進行打印,區分大小寫

1
sed -n ' /^a/p'  /etc/passwd     #搜索以a開頭的行進行打印

1
sed -n '/bash$/p'  /etc/passwd       #打印以bash結尾的行

 

1
sed -n '/ftp\|root/p'  /etc/passwd   #搜索包含ftp或者root的行進行打印

1
sed -n '2,/nobody/p'  /etc/passwd     #從第二行開始打印到包含nobody的行

1
sed -nr '/ro{1,}t/p'  /etc/passwd    #-r表示支持正則表達式

六、刪除行

1
2
3
4
5
6
7
8
sed 'd'  abc.txt           #不指定行號,所有刪除
sed '3d'  abc.txt          #刪除第三行
sed '2,4d'  abc.txt        #刪除2-4行
sed '$d'  abc.txt          #刪除最後一行
sed '/^$/d'  abc.txt       #刪除空行
sed '/nologin$/d'  /etc/passwd      #刪除包含nologin字符的行
sed '/nologin$/!d'  /etc/passwd     #不刪除包含nologin的行
sed '/2/,/3/d'  abc.txt             #在出現2時,開啓刪除功能                      出現3時,關閉刪除功能

 

七、替換

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

4種替換標記

  1. 數字:代表新字符串將替換第幾處匹配的地方
  2. g:代表新字符將會替換全部匹配的地方
  3. p:打印與替換命令匹配的行,與-n一塊兒使用
  4. w 文件:將替換的結果寫到文件中
1
2
3
4
5
6
7
8
sed -n 's/root/admin/p'  /etc/passwd    #將匹配行的第一個root更改成admin
sed -n 's/root/admin/2p'  /etc/passwd   #將匹配行的第二個root更改成admin
sed -n 's/root/admin/gp'  /etc/passwd   #將匹配行的全部root更改成admin
sed '1,20 s/^/#/'  /etc/passwd          #1-20行行首添加#號
sed '^root/ s/$/#'  /etc/passwd        #在以root開頭的行,行尾添加#號
sed -f 123.sed 123.txt                #-f以指定的腳本文件來處理輸入文件
sed '1,20w out.txt'  /etc/passwd       #將1-20行的內容保存到 out .txt文件中
sed -n 's/\bin\/bash\/bin\/csh/p'  /etc/passwd #刪除字符時使用\

  

八、插入

1
sed '/55/c ABC'  123.txt  #將含有55的行,替換爲ABC

1
sed '1,3a ABC'  123.txt   #在第一行到第三行,行下插入ABC

 

1
sed '1i ABC'  123.txt     #在第一行,行上插入ABC

1
sed '5r /etc/resolv.conf'  123.txt  #在第五行後導入該文件內容

1
sed '/root/{H;d};$G'  /etc/passwd    #將包含root的行剪切到末尾,H表示複製到剪切板,G表示粘貼到指定行後
相關文章
相關標籤/搜索