一、sed編輯器工作流程及使用方法

一、sed編輯器

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

1、sed編輯器工作流程

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

●讀取: sed從輸入流 (文件、管道、標準輸入) 中讀取一行內容並存儲到臨時的緩衝區中(又稱模式空間,pattern space)

●執行:默認情況下,所有的sed命令都在模式空間中順序地執行,除非指定了行的地址,否則sed命令將會在所有的行上依次執行。

●顯示:發送修改後的內容到輸出流。在發送數據後,模式空間將會被清空。在所有的文件內容都被處理完成之前,上述過程將重複執行,直至所有內容被處理完。

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

2、sed命令格式

命令格式:

sed -e '格式' 文件1 文件2 ...
sed -n -e ‘操作’ 文件1 文件2 ...
sed -f 腳本文件 文件1 文件2 ...
sed -i -e '操作' 文件1 文件2 ...

sed -e ' n {
操作1
操作2
...
} ' 文件1 文件2

3、常用選項

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

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

h或- -help: 顯示幫助。

-n、- -quiet或silent:禁止sed編輯器輸出,但可以與p命令一起使用完成輸出。

-i: 直接修改目標文本文件。
在這裏插入圖片描述

在這裏插入圖片描述

4、常用操作

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

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

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

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

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

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

p: 打印,如果同時指定行,表示打印指定行;如果不指定行,則表示打印所有內容;如果有非打印字符,則以ASCII碼輸出。其通常與“-n”選項一起使用

[root@localhost d3]#sed -n 'p'  abc.txt 
one
two
three
four
five

=: 打印行號。

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

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

[root@localhost d3]#sed -n 'l' abc.txt 
one$
two$
three$
four$
five$

5、使用地址尋找

sed編輯器有2種尋址方式:
1、以數字形式表示行區間
2、用文本模式來過濾出行


在這裏插入圖片描述


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

在這裏插入圖片描述


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

在這裏插入圖片描述


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

在這裏插入圖片描述


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

在這裏插入圖片描述


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

在這裏插入圖片描述


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

在這裏插入圖片描述


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

在這裏插入圖片描述


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

在這裏插入圖片描述


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

在這裏插入圖片描述


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

在這裏插入圖片描述


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

在這裏插入圖片描述


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

在這裏插入圖片描述


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

在這裏插入圖片描述


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

在這裏插入圖片描述在這裏插入圖片描述


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

在這裏插入圖片描述


6、刪除行


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

在這裏插入圖片描述


sed '/1/,/3/d' abc.txt

在這裏插入圖片描述


7、替換

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

4種替換標記

數字:表明新字符串將替換第幾處匹配的地方
g:表明新字符將會替換所有匹配的地方
p:打印與替換命令匹配的行,與-n一起使用
w 文件:將替換的結果寫到文件中



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

在這裏插入圖片描述
在這裏插入圖片描述

sed -n 's/\bin\/bash\/bin\/csh/p' /etc/passwd

在這裏插入圖片描述


8、插入


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

在這裏插入圖片描述


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

在這裏插入圖片描述


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

在這裏插入圖片描述


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

在這裏插入圖片描述

sed '/root/{H;d};$G' /etc/passwd	#將包含root的行剪切到末尾,H表示複製到剪切板,G表示粘貼到指定行後

未完

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章