文章目錄
- 一、sed編輯器
- 1、sed編輯器作業流程
- 2、sed命令格式
- 3、常用選項
- 4、常用操作
- 5、使用地址尋找
- 6、洗掉行
- 7、替換
- 4種替換標記
- 8、插入
一、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表示粘貼到指定行后
未完
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/240929.html
標籤:其他
