目錄
sed編輯器
命令格式:
常用選項(xiàng):
常用操作:
打印內(nèi)容:
使用地址:
?編輯
替換:?
插入:
sed編輯器
sed是一種流編輯器,流編輯器會(huì)在編輯器處理數(shù)據(jù)之前基于預(yù)先提供的一組規(guī)則來(lái)編輯數(shù)據(jù)流。
sed編輯器可以根據(jù)命令來(lái)處理數(shù)據(jù)流中的數(shù)據(jù),這些命令要么從命令行中輸入,要么存儲(chǔ)在一個(gè)
命令文本文件中。
sed 的工作流程主要包括讀取、執(zhí)行和顯示三個(gè)過程:
?讀?。簊ed 從輸入流(文件、管道、標(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)容都
被處理完成之前,上述過程將重復(fù)執(zhí)行,直至所有內(nèi)容被處理完。
在所有的文件內(nèi)容都被處理完成之前,上述過程將重復(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(小寫L):打印數(shù)據(jù)流中的文本和不可打印的ASCII字符(比如結(jié)束符$、制表符\t)
打印內(nèi)容:
sed -n -e 'p' a.txt
?sed -n -e '=' a.txt
?sed -n -e 'l' a.txt
sed -n -e '=;p' a.txt
sed -n -e '=' -e 'p' a.txt
sed -n '
> =
> p
> ' a.txt
使用地址:
sed編輯器有2種尋址方式:
1、以數(shù)字形式表示行區(qū)間
2、用文本模式來(lái)過濾出行
sed -n '1p' a.txt
sed -n '1p' a.txt
sed -n '1,3p' a.txt
sed -n '3,$p' a.txt
sed -n '1,+3p' a.txt? ? ?#打印1之后的連續(xù)3行,即1-4行
sed '5q' a.txt? ??? ??? ?#打印前5行信息后退出,q表示退出
sed -n 'p;n' a.txt? ? ? #打印奇數(shù)行;n表示移動(dòng)到下一行
sed -n 'n;p' a.txt?? ??? ?#打印偶數(shù)行
用腳本顯示奇偶行
?
?sed -n ‘2,${n;p}'? ?a.txt? ? ? ? ?#從第2行打印奇數(shù)行
sed -n '/root/p' passwd #匹配文件中有root的內(nèi)容
sed -n '/^a/p' passwd #打印所有開頭是a的內(nèi)容
sed -n '/bash$/p' passwd #打印所有結(jié)尾是bash的內(nèi)容
sed -n '/ftp\|root/p' passwd 打印含有ftp或root的內(nèi)容
sed -n '2,/nobody/p' passwd 從第二行打印到含有noboby的內(nèi)容
sed -n '2,/nobody/=' passwd #打印從第二行到含有noboby的內(nèi)容的行號(hào)
sed -nr '/ro{1,}t/p' /etc/passwd?? ?#-r表示支持?jǐn)U展正則表達(dá)式
sed 'd' a.txt? ??? ??? ?#全刪
sed '3d'?a.txt #就刪第三行
sed '2,4d' a.txt #刪第二,第四行
sed '$d' a.txt #刪除最后一行
sed '/^$/d' a.txt? ??? ?#刪除空行
sed '/nologin$/d' passwd #刪除以nologin結(jié)尾的內(nèi)容
sed '/nologin$/!d' /etc/passwd?? ??? ?#“!”表示取反操作
sed '/two/,/four/d' a.txt?? ??? ?#從第一個(gè)位置打開行刪除功能,到第二個(gè)位置關(guān)閉行刪除功能
替換:?
行范圍 s/舊字符串/新字符串/替換標(biāo)記
4種替換標(biāo)記:
數(shù)字:表明新字符串將替換第幾處匹配的地方
g:表明新字符串將會(huì)替換所有匹配的地方
p:打印與替換命令匹配的行,與-n一起使用
w 文件:將替換的結(jié)果寫到文件中
sed -n 's/root/admin/p' passwd #把匹配到的第一個(gè)root替換為admin
sed -n 's/root/admin/2p' passwd #替換第二次匹配到root
sed -n 's/root/admin/gp' passwd #替換所有root
?sed -n 's/root//gp' passwd #把匹配的root替換為空
sed -n '1,20 s/^/#/p' passwd #把1到20行的前面加#
sed '/^root/ s/$/#/' passwd #以root開頭的內(nèi)容把結(jié)尾替換成#
sed '/root/ s/^/#/' passwd #把以root開頭的內(nèi)容的開頭加上#
?sed -rn 's/.*root.*/#&/p' passwd #表示將匹配到的整行文本以#開頭進(jìn)行注釋,&表示匹配到的整行文本
sed -f c.sh a.txt #對(duì)a.txt調(diào)用c.sh的規(guī)則
sed '1,20w out.txt' passwd #將passwd的前二十行內(nèi)容寫入d.txt
sed '1,20 s/^/#/w d.txt' /passwd #將passwd的前二十行的開頭加#然后寫入d.txt
sed -n 's/\/bin\/bash/\/bin\/csh/p' passwd #將bin/bash替換為/bin/csh
sed -n 's!/bin/bash!/bin/csh!p' passwd?? ??? ?#使用“!”作為字符串分隔符
sed -i 's9\945\9\99\98\939g' e.txt?? ??? ?#將94599替換為9893
插入:
sed '/123/c ABC' a.txt #把a(bǔ).txt中的123替換為ABC
#"c"是sed命令中的替換操作符,表示將匹配到的行替換為指定的文本"ABC"
sed 'y/145/ABC/' a.txt ? #使所有的1字符轉(zhuǎn)換成A,所有的2字符轉(zhuǎn)換成B,所有的3字符轉(zhuǎn)換成C
#y是sed命令的一個(gè)操作符,表示進(jìn)行字符替換。具體來(lái)說(shuō),它的作用是將a.txt文件中的所有字符1、4、5分別替換為A、B、C,然后將替換后的結(jié)果輸出到標(biāo)準(zhǔn)輸出
sed '1,3a ABC' a.txt #在文本a.txt第1到第3行之間追加一行文本“ABC”
?sed '1i ABC' a.txt #在a.txt文件的第一行前插入字符串"ABC"
?sed '5r /etc/resolv.conf' a.txt #把etc/resolv.conf的內(nèi)容插入a.txt的第五行
#r的意思是將指定文件的內(nèi)容讀取并插入到當(dāng)前正在處理的文件中的指定行之后
sed '/root/{H;d};$G' passwd?? ?#在passwd文件中找到包含字符串"root"的行,將該行的內(nèi)容添加到模式空間中的緩沖區(qū)中,并刪除該行。對(duì)于最后一行,使用$G命令將其添加到模式空間中的緩沖區(qū)中。最終,模式空間中的內(nèi)容將包含所有以"root"開頭的行,并且每個(gè)匹配行的下一行將與其一起輸出。
sed '1,2H;3,4G' /etc/passwd?? ??? ??? ?#將1、2行復(fù)制到3和4行的下面
?echo "111222333" | sed -r 's/(111)(222)/\2\1/'?? ?#將字符 111 和 222 互換位置
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-449072.html
?echo "111222333" | sed -r 's/^(.)(.*)(.)$/\3\2\1/'?? ??? ?#將第一個(gè)字符和最后一個(gè)互換位置
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-449072.html
到了這里,關(guān)于Sed編輯器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!