提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔
sed 命令
sed 編輯器
- sed是一種流編輯器,流編輯器會(huì)在編輯器處理數(shù)據(jù)之前基于預(yù)先提供的一組規(guī)則來(lái)編輯數(shù)據(jù)流。
- sed編輯器可以根據(jù)命令來(lái)處理數(shù)據(jù)流中的數(shù)據(jù),這些命令要么從命令行中輸入,要么存儲(chǔ)在一個(gè)命令文本文件中。
sed 的工作流程的三個(gè)過(guò)程
- 讀取:sed 從輸入流(文件、管道、標(biāo)準(zhǔn)輸入)中讀取一行內(nèi)容并存儲(chǔ)到臨時(shí)的緩沖區(qū)中(又稱模式空間,pattern space)。
- 執(zhí)行:默認(rèn)情況下,所有的sed 命令都在模式空間中順序地執(zhí)行,除非指定了行的地址,否則sed 命令 將會(huì)在所有的行上依次執(zhí)行。
- 顯示:發(fā)送修改后的內(nèi)容到輸出流。在發(fā)送數(shù)據(jù)后,模式空間將會(huì)被清空。在所有的文件內(nèi)容都被處理完成之前,上述過(guò)程將重復(fù)執(zhí)行,直至所有內(nèi)容被處理完。
在所有的文件內(nèi)容都被處理完成之前,上述過(guò)程將重復(fù)執(zhí)行,直至所有內(nèi)容被處理完。
注意:默認(rèn)情況下所有的sed命令都是在模式空間內(nèi)執(zhí)行的,因此輸入的文件并不會(huì)發(fā)生任何變化,除非是用重定向存儲(chǔ)輸出。
命定格式
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 ...
常用選項(xiàng)
-e 或--expression=:表示用指定命令來(lái)處理輸入的文本文件,只有一個(gè)操作命令時(shí)可省略,一般在執(zhí)行多個(gè)操作命令使用
-f 或--file=:表示用指定的腳本文件來(lái)處理輸入的文本文件。
-h 或--help:顯示幫助。
-n --quiet 或 silent:禁止sed編輯器輸出,但可以與p命令一起使用完成輸出。
-i 直接修改目標(biāo)文本文件。
常用操作
s: 替換,替換指定字符。
d: 刪除,刪除選定的行。
a: 增加,在當(dāng)前行下面增加一行指定內(nèi)容。
i: 插入,在選定行上面插入一行指定內(nèi)容。
c: 替換,將選定行替換為指定內(nèi)容。
y: 字符轉(zhuǎn)換,轉(zhuǎn)換前后的字符長(zhǎng)度必須相同。
p: 打印,如果同時(shí)指定行,表示打印指定行;如果不指定行,則表示打印所有內(nèi)容;如果有非打印字符,則以 ASCII 碼輸出。其通常與“-n”選項(xiàng)一起使用。
=: 打印行號(hào)。
l: 打印數(shù)據(jù)流中的文本和不可打印的ASCII字符(比如結(jié)束符$、制表符\t)
實(shí)驗(yàn)操作
打印內(nèi)容
- sed -n -e ‘p’
- sed -n -e ‘=’
- sed -n -e ‘l’
4.sed -n -e ‘=;p’
5.sed -n -e ‘=’ -e ‘p’
- sed -n ’
=
p
’ test
使用地址
sed編輯器有2種尋址方式
- 1、以數(shù)字形式表示行區(qū)間
- 2、用文本模式來(lái)過(guò)濾出行
1.sed -n ‘1p’
2.sed -n ‘$p’
- sed -n ‘1,3p’
4.sed -n ‘3,$p’
5.sed -n ‘1,+3p’ ? ? ? ? ? ? ? ? ? ? ? ? #打印1之后的連續(xù)3行,即1-4行
6.sed ‘5q’? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #打印前5行信息后退出,q表示退出
7.sed -n ‘p;n’? ? ? ? ? ? ? ? ? ? ? ? ? ? #打印奇數(shù)行;n表示移動(dòng)到下一行
- sed -n ‘n;p’? ? ? ? ? ? ? ? ? ? ? ? ? #打印偶數(shù)行
- sed -n ‘2,${n;p}’
10.sed -n ‘/user/p’ /etc/passwd
11.sed -n ‘/^a/p’ /etc/passwd
12.sed -n ‘/bash$/p’ /etc/passwd
13.sed -n ‘/ftp|root/p’ /etc/passwd
14.sed -n ‘2,/nobody/p’ /etc/passwd
15.sed -n ‘2,/nobody/=’ /etc/passwd
16.sed -nr ‘/ro{1,}t/p’ /etc/passwd
刪除行
- sed ‘d’ #全刪
2.sed ‘3d’
3.sed ‘2,4d’
4.sed ‘$d’
5.sed ‘/^$/d’
6.sed ‘/nologin$/d’ /etc/passwd
7.sed ‘/nologin$/!d’ /etc/passwd
8. sed ‘/2/,/3/d’
- sed ‘/1/,/3/d’
替換
行范圍 s/舊字符串/新字符串/替換標(biāo)記文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-458078.html
4種替換標(biāo)記文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-458078.html
數(shù)字:表明新字符串將替換第幾處匹配的地方
g:表明新字符串將會(huì)替換所有匹配的地方
p:打印與替換命令匹配的行,與-n一起使用
w 文件:將替換的結(jié)果寫到文件中
sed -n 's/root/admin/p' /etc/passwd
sed -n 's/root/admin/2p' /etc/passwd
sed -n 's/root/admin/gp' /etc/passwd
sed 's/root//g' /etc/passwd
sed '1,20 s/^/#/' /etc/passwd
sed '/^root/ s/$/#/' /etc/passwd
sed '/root/ s/^/#/' /etc/passwd
sed -rn 's/.*root.*/#&/p' /etc/passwd
sed -f script.sed testfile2
sed '1,20w out.txt' /etc/passwd
sed '1,20 s/^/#/w out.txt' /etc/passwd
sed -n 's/\/bin\/bash/\/bin\/csh/p' /etc/passwd
sed -n 's!/bin/bash!/bin/csh!p' /etc/passwd #使用“!”作為字符串分隔符
sed -i 's9\945\9\99\98\939g' test.txt #將94599替換為9893
插入
sed '/45/c ABC' testfile2
sed 'y/145/ABC/' testfile2 #使所有的1字符轉(zhuǎn)換成A,所有的2字符轉(zhuǎn)換成B,所有的3字符轉(zhuǎn)換成C
sed '1,3a ABC' testfile2
sed '1i ABC' testfile2
sed '5r /etc/resolv.conf' testfile2
sed '/root/{H;d};$G' /etc/passwd #將包含root的行剪切到末尾,H表示復(fù)制到剪切板,G表示粘貼到指定行后
sed '1,2H;3,4G' /etc/passwd #將1、2行復(fù)制到3和4行的下面
echo "111222333" | sed -r 's/(111)(222)/\2\1/' #將字符 111 和 222 互換位置
echo "111222333" | sed -r 's/^(.)(.*)(.)$/\3\2\1/' #將第一個(gè)字符和最后一個(gè)字符互換
到了這里,關(guān)于shell sed命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!