這篇文章給大家分享的是有關(guān)shell中sed命令如何使用的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
成都創(chuàng)新互聯(lián)"三網(wǎng)合一"的企業(yè)建站思路。企業(yè)可建設(shè)擁有電腦版、微信版、手機(jī)版的企業(yè)網(wǎng)站。實(shí)現(xiàn)跨屏營銷,產(chǎn)品發(fā)布一步更新,電腦網(wǎng)絡(luò)+移動(dòng)網(wǎng)絡(luò)一網(wǎng)打盡,滿足企業(yè)的營銷需求!成都創(chuàng)新互聯(lián)具備承接各種類型的網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)項(xiàng)目的能力。經(jīng)過十年的努力的開拓,為不同行業(yè)的企事業(yè)單位提供了優(yōu)質(zhì)的服務(wù),并獲得了客戶的一致好評(píng)。sed工具:sed是文本流編輯器,逐行對(duì)文件的內(nèi)容進(jìn)行處理
用法:sed [option] ... 'script' inputfile...
選項(xiàng):
-n:靜默模式,不輸出模式空間的內(nèi)容至屏幕
-e:實(shí)現(xiàn)多點(diǎn)的功能編輯
-f /path/from/script_file:從指定的文件讀取編輯腳本
-r:支持使用擴(kuò)展的正則表達(dá)式
地址界面方法:
(1)不給地址:對(duì)全文進(jìn)行處理
(2)一個(gè)地址(單地址)
#:指定的行
/pattern/:被引用處模式所能夠匹配到的每一行:
(3)地址范圍
#,#:從第幾行到第幾行
#,+#:顯示從第幾行開始向后的N行
/pat1/,/pat2/:同時(shí)匹配2個(gè)參數(shù),表示匹配這2個(gè)參數(shù)之間的所有行
#,/pat1/:表示匹配這2個(gè)參數(shù)之間的所有行
(4)~:步進(jìn)
#sed -n ‘1~2p’ test.txt(第一行開始,每次增加2行,意思就是顯示奇數(shù)行)
#sed -n ‘2~2p’ test.txt(從第二行開始顯示,每次增加2行,意思就是顯示偶數(shù)行)
編輯命令:
d:刪除被地址界定選定的內(nèi)容
p:顯示(打?。┠J娇臻g中的內(nèi)容到屏幕上,只打印符合條件的行,常于-n結(jié)合一起使用
a \text:在行后面一行追加文本:支持使用\n實(shí)現(xiàn)多行追加;
例: #sed '/^T/a \abc' a.txt
i \text:在行前面一行追加文本:支持使用\n實(shí)現(xiàn)多行追加;
例:# sed '/^T/i \abc' a.txt
c \text:替換匹配到的行:
例:# sed '/^T/c \abc' a.txt
w /path/to/somefile:保存模式空間中匹配到的內(nèi)容至指定文件中;
r /path/from/somefile:讀取指定文件的文本游戲 至模式空間中匹配到的行后;
=:為模式空間中的行,打印行號(hào);
例:#sed -n '/^T/=' a.txt
q:一旦匹配到內(nèi)容,則退出;不再往下匹配
!:取反條件;對(duì)除了模式匹配到的行以外的行,進(jìn)行操作;
s///:支持使用其它分隔符,s@@@,s###
替換標(biāo)記:
g:行內(nèi)全局進(jìn)行替換:例:sed -n ‘s@r..t@&er@p’ /etc/passwd 不帶g選項(xiàng),只替換每一行的第一次
#:行內(nèi)替換,替換第幾次出現(xiàn)的匹配的內(nèi)容,例:sed -n 's/Unix/UNIX/2p' a.txt,把第2次出現(xiàn)的Unix替換
p:如果替換成功,則顯示替換成功的行,與-n一起使用
w /path/to/somefile:將替換成功的行保存至指定文件中
練習(xí)1:刪除/boot/grub/grub.conf文件中所有以空白開頭的行行首的空白字符
#sed 's@^[[:space:]]\+@@' /boot/grub/grub.conf
練習(xí)2:刪除/etc/fstab文件中所有以#開頭,后面至少跟一個(gè)空白字符的行的行首的#和空白字符
#sed 's@^#[[:space:]]\+@@' /etc/fstab
練習(xí)3:echo一個(gè)絕對(duì)路徑給sed命令,取出其基名:
#echo "/etc/sysconfig" | sed 's@[^/]\+$@@'
練習(xí)4:批量修改文件名字
#ls *.jpg | sed 's#\(.*\)_finished\(.*\).*#mv & \1\2#g' | bash
高級(jí)編輯命令:
h:把模式空間中的內(nèi)容覆蓋至保持空間中;
H:把模式空間的內(nèi)容追加至保持空間中;
g:從保持空間取出數(shù)據(jù)覆蓋至模式空間;
G:從保持空間取出數(shù)據(jù)追加至模式空間;
x:把模式空間中內(nèi)容與保持空間中的內(nèi)容進(jìn)行互換操作;
n:讀取匹配到的行的下一行覆蓋至模式空間;
N:讀取匹配到的行的下一行追加至模式空間;
d:刪除模式空間中的所有行;
D:刪除多行模式空間中的第一行;
示例用法:
#sed -n ‘n;p’ test.txt(輸出偶數(shù)行)
#sed ‘n;d’ test.txt(只顯示奇數(shù)行)
#sed ‘$!d’ test.txt(最出文件最后一行)
#sed ‘G’ test.txt(在每一行下面加一個(gè)空白行)
#sed ‘/^$/d;G’ test.txt(每行間只保留一個(gè)空白行)
#sed '1!G;h;$!d' test.txt(逆行顯示文件內(nèi)容)
#sed ‘$!N;$!D’ test.txt(讀文件的后2行)
#sed -n ‘1!G;h;$p’ test.txt(逆行顯示文件內(nèi)容)
保持空間使用的一個(gè)例子:
需求:把單詞the和statement之間的單詞的全部改為大寫
原文:
find the Match statement
consult the Get statement
using the Read statement to retrieve data
sed寫法:
/the .*statement/{
h
s/.*the \(.*\)statement.*/\1/
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
G
s/\(.*\)\n\(.*the \).*\( statement.*\)/\2\1\3/
}
結(jié)果:
find the MATCH statement
Consult the GET statement
using the READ statement to retrieve data
解析:
/the .*statement/:匹配這種模式的行,然后進(jìn)行修改
h:將匹配到的內(nèi)容覆蓋至保持空間,保留一份復(fù)本
s/.*the \(.*\)statement.*/\1/:在模式空間中將匹配到行轉(zhuǎn)換為要改變的單詞
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/:將修改后的單詞轉(zhuǎn)換為大寫
G:把保持空間的復(fù)本追加到模式空間
s/\(.*\)\n\(.*the \).*\( statement.*\)/\2\1\3/:將修改為大寫的單詞替換到原語句中的單詞
感謝各位的閱讀!關(guān)于“shell中sed命令如何使用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。