*sed可以實(shí)現(xiàn)一些grep的功能,但是稍微麻煩了一些,sed的強(qiáng)項(xiàng)在于刪除文件中的內(nèi)容和替換
成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括武陵源網(wǎng)站建設(shè)、武陵源網(wǎng)站制作、武陵源網(wǎng)頁(yè)制作以及武陵源網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,武陵源網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到武陵源省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!sed實(shí)現(xiàn)grep檢索功能:
1.根據(jù)關(guān)鍵字檢索:
[root@localhost ~]# sed -n '/root/'p passwd.txt
*使用sed檢索時(shí)需要在關(guān)鍵字前加-n參數(shù),關(guān)鍵字后加p,關(guān)鍵詞還需要用 // 包括起來(lái)
2.關(guān)鍵字有特殊符號(hào)時(shí)加上 -r 參數(shù)或使用脫義符
[root@localhost ~]# sed -nr '/o+t/'p passwd.txt
3.打印指定行:(打印指定行時(shí)直接寫(xiě)行號(hào)即可,不需要加//符號(hào)括起來(lái))
[root@localhost ~]# sed -n '5'p passwd.txt
[root@localhost ~]# sed -n '5,$'p passwd.txt #打印第五行至最后一行
4.-e 參數(shù):使用多個(gè)表達(dá)式:
[root@localhost ~]# sed -e '1'p -e '/root/'p -n passwd.txt
*打印第一行內(nèi)容并檢索包含root的行,如果第一行同時(shí)包含root,那么第一行會(huì)被打印兩次
5.不區(qū)分大小寫(xiě):(加上大寫(xiě)的i)
[root@localhost ~]# sed -n '/testword/'Ip passwd.txt
sed刪除功能:
1.刪除打印結(jié)果中指定的行:
[root@localhost ~]# wc -l passwd.txt
22 passwd.txt
#查看文件行數(shù)
[root@localhost ~]# sed '1,20'd passwd.txt
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
linux01:x:1000:1000::/home/linux01:/bin/bash
#刪除第1-20行,打印剩余的行
[root@localhost ~]# wc -l passwd.txt
22 passwd.txt
#該操作不會(huì)真實(shí)刪除文件內(nèi)容,只是刪除打印結(jié)果
2.-i 參數(shù):刪除文件中指定的行(加上 -i參數(shù)后會(huì)真實(shí)刪除文件內(nèi)容)
[root@localhost ~]# wc -l passwd.txt
22 passwd.txt
[root@localhost ~]# sed -i '1,20'd passwd.txt
[root@localhost ~]# wc -l passwd.txt
2 passwd.txt
*用于在刪除大日志文件內(nèi)容時(shí)比較常用
sed替換功能:
1.根據(jù)關(guān)鍵字替換:
[root@localhost ~]# cat passwd.txt
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# sed 's/chrony/sed_test/g' passwd.txt
sed_test:x:998:996::/var/lib/sed_test:/sbin/nologin
linux01:x:1000:1000::/home/linux01:/bin/bash
*格式: 's/ 被替換關(guān)鍵字 / 替換內(nèi)容 /g'
2.特殊符號(hào)匹配時(shí)加 -r 參數(shù):
[root@localhost ~]# cat passwd.txt
nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# sed -r 's/n+y/sed_test/g' passwd.txt
sed_test:x:998:996::/var/lib/chronwy:/sbin/nologin
linux01:x:1000:1000::/home/linux01:/bin/bash
3.分段替換位置:
[root@localhost ~]# cat passwd.txt
nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/g' passwd.txt
/sbin/nologin:x:998:996::/var/lib/chronwy:nnnnny
/bin/bash:x:1000:1000::/home/linux01:linux01
*使用冒號(hào)分割為3段,將第三段和第一段位置互換
4.配置關(guān)鍵詞為目錄路徑時(shí)加上脫義符或使用其他替換符號(hào):
[root@localhost ~]# cat passwd.txt
nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# sed 's/\/bin\/bash/AAAAAAA/g' passwd.txt
nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
linux01:x:1000:1000::/home/linux01:AAAAAAA
[root@localhost ~]# sed 's#/bin/bash#AAAAAAA#g' passwd.txt
nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
linux01:x:1000:1000::/home/linux01:AAAAAAA
5.刪除所有字母:
[root@localhost ~]# cat passwd.txt
nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# sed 's/[a-zA-Z]//g' passwd.txt
::998:996::///://
01::1000:1000:://01://
6.在每行前添加內(nèi)容:
[root@localhost ~]# cat passwd.txt
nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# sed -r 's/.*/sed_test:&/g' passwd.txt
sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
*匹配每行所有內(nèi)容:.*,&符號(hào)代表.*的內(nèi)容
7.真實(shí)替換文件中的內(nèi)容:-i 參數(shù)(以上6條示例都不會(huì)實(shí)際更改文件內(nèi)容,只更改替換完成的打印輸出結(jié)果)
[root@localhost ~]# cat passwd.txt
nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# sed -i 's/.*/sed_test:&/g' passwd.txt
[root@localhost ~]# cat passwd.txt
sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
補(bǔ)充:
把每個(gè)單詞的第一個(gè)小寫(xiě)字母變大寫(xiě):
sed 's/\b[a-z]/\u&/g' filename
把所有小寫(xiě)變大寫(xiě):
sed 's/[a-z]/\u&/g' filename
大寫(xiě)變小寫(xiě):
sed 's/[A-Z]/\l&/g' filename
sed在某一行最后添加一個(gè)數(shù)字
sed -r 's/(^a.*)/\1 12/' test
sed -r 's/^a.*/& 12/' test
打印1到100行含某個(gè)字符串的行
sed -n '1,100{/abc/p}' 1.txt
*awk相比grep/egrep/sed的功能更加強(qiáng)大,默認(rèn)支持拓展正則表達(dá)式,grep需要加 -E 參數(shù),sed需要加 -r 參數(shù)
1.分割文件內(nèi)容打印指定段數(shù):
[root@localhost ~]# cat test.txt
zhangsan 100
lisi 92
wangwu 95
user1 88
user2 93
[root@localhost ~]# awk '{print $1}' test.txt
zhangsan
lisi
wangwu
user1
user2
*默認(rèn)以空格為分隔符,$指定打印的段數(shù)
2.-F參數(shù):指定分隔符:
[root@localhost ~]# cat passwd.txt
AAAA:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# awk -F ':' '{print $3}' passwd.txt
nnnnny
linux01
#打印多段時(shí)用逗號(hào)區(qū)分
[root@localhost ~]# awk -F ':' '{print $1,$3}' passwd.txt
AAAA nnnnny
AAAA linux01
#指定打印結(jié)果中段與段的分割符號(hào)
[root@localhost ~]# awk -F ':' '{print $1"-->"$3}' passwd.txt
AAAA-->nnnnny
AAAA-->linux01
*awk {print $0}表示打印所有,相當(dāng)于cat
3.awk檢索:(相當(dāng)于grep)
[root@localhost ~]# cat passwd.txt
AAAA:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# awk '/nnn/' passwd.txt
AAAA:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
4.檢索指定段中包含關(guān)鍵字的行:
[root@localhost ~]# cat passwd.txt
ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# awk -F ':' '$1 ~/AAA/' passwd.txt
AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
5.多個(gè)表達(dá)式組合使用:
[root@localhost ~]# cat passwd.txt
ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# awk -F ':' '/linux/ {print $1,$3} /nnn/ {print $2,$3}' passwd.txt
sed_test nnnnny
AAAA linux01
*打印包含linux關(guān)鍵字的行的第1和第3段,打印包含nnn關(guān)鍵字的第2和第3段
6.檢索多個(gè)關(guān)鍵詞的行并指定打印段:
[root@localhost ~]# cat passwd.txt
ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# awk -F ':' '/linux|nnn/ {print $1}' passwd.txt
ABCD
AAAA
7.通過(guò)運(yùn)算符號(hào)檢索:
[root@localhost ~]# cat passwd.txt
ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# awk -F ':' '$5==1000' passwd.txt
AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# awk -F ':' '$5==1000 {print $1}' passwd.txt
AAAA
8.針對(duì)數(shù)字判斷時(shí),不加雙引號(hào),否則判斷條件會(huì)被當(dāng)做字符串而不是數(shù)字(數(shù)字當(dāng)做字符串判斷時(shí),根據(jù)ASCII碼判斷,998大于1000):
[root@localhost ~]# cat passwd.txt
ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# awk -F ':' '$5<1000' passwd.txt
ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
#加上雙引號(hào)后1000被當(dāng)做了字符串,而不是數(shù)字
[root@localhost ~]# awk -F ':' '$5<"1000"' passwd.txt
[root@localhost ~]#
9.字符串判斷:(判斷字符串時(shí)判斷條件加上雙引號(hào))
[root@localhost ~]# cat passwd.txt
ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# awk -F ':' '$9!="/sbin/nologin"' passwd.txt
AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
10.兩個(gè)字段之間比較和多個(gè)條件檢索:
[root@localhost ~]# cat passwd.txt
ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# awk -F ':' '$5>$6' passwd.txt
ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
[root@localhost ~]# awk -F ':' '$5>$6 {print $5,$6}' passwd.txt
998 996
[root@localhost ~]# awk -F ':' '$5>999' passwd.txt
AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# awk -F ':' '$5>900 && $6<999' passwd.txt
ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
[root@localhost ~]# awk -F ':' '$5>999 || $9=="/sbin/nologin"' passwd.txt
ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
*最后一種字符串判斷除了用==符號(hào)還可以用~檢索
11.OFS:指定打印結(jié)果分隔符:
[root@localhost ~]# cat passwd.txt
ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# awk -F ':' '{OFS="***"} {print $1,$2,$3}' passwd.txt
ABCD***sed_test***nnnnny
AAAA***sed_test***linux01
[root@localhost ~]# awk -F ':' '{OFS="***"} $5<1000 {print $1,$2,$3}' passwd.txt
ABCD***sed_test***nnnnny
12.NR:在每行前面顯示行數(shù):
[root@localhost ~]# cat passwd.txt
ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# awk -F ':' '{print NR":" $0}' passwd.txt
1:ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
2:AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
13.NF:在每行前面顯示段數(shù):
[root@localhost ~]# awk -F ':' '{print NF":" $0}' passwd.txt
9:ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
9:AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
14.根據(jù)行數(shù)或者段數(shù)顯示指定的行:
1)顯示行號(hào)小于2的行:
[root@localhost ~]# awk -F ':' '{print NR":" $0}' passwd.txt
1:ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
2:AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# awk 'NR<2' passwd.txt
ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
2)顯示前10行并且第一段為AAAA的行:
[root@localhost ~]# awk -F ':' 'NR<10 && $1 ~/AAAA/' passwd.txt
AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
15.=和==的區(qū)別:(==是匹配相等的數(shù)字或字符串,=是賦值)
[root@localhost ~]# cat passwd.txt
ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# awk -F ":" '$1=="ABCD"' passwd.txt
ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
[root@localhost ~]# awk -F ":" '$1="hello"' passwd.txt
hello sed_test nnnnny x 998 996 /var/lib/chronwy /sbin/nologin
hello sed_test linux01 x 1000 1000 /home/linux01 /bin/bash
16.求和:
[root@localhost ~]# cat passwd.txt
ABCD:sed_test:nnnnny:x:998:996::/var/lib/chronwy:/sbin/nologin
AAAA:sed_test:linux01:x:1000:1000::/home/linux01:/bin/bash
[root@localhost ~]# awk -F ':' '{(tot=tot+$5)}; END {print tot}' passwd.txt
1998
補(bǔ)充:
. 表示任意1個(gè)字符
* a b o前面的這個(gè)字符有0或者多個(gè)
abc* ===> ab、abccc
.* 貪婪匹配
? 擴(kuò)展正則 表示:?前面的字符有0個(gè)或1個(gè)
a1? ==> a or a1
+ 擴(kuò)展正則 表示:+前面的字符有1個(gè)或多個(gè)
| 擴(kuò)展正則 表示:或者
egrep 'abc|123' 1.txt
[ ] 表示方括號(hào)里面的1個(gè)字符
[a-zA-Z0-9] 表示所有大小寫(xiě)字母和數(shù)字
[abc] 表示a或b或c
[a|@] 表示a或|或@
[^] 表示非,取反
^ 表示開(kāi)頭
$ 表示結(jié)尾
{ } 表示范圍
a{1,5} ===> a或aa或aaa或aaaa或aaaaa
b{3} ===> bbb
( ) 小括號(hào)里面的字符看成一個(gè)整體
(abc){2} ==》 abcabc
(abc)+ ==>abc或abcabc或abc*n
abc{2} ==> abcc
擴(kuò)展正則符號(hào): ? + | { } 使用時(shí)grep -E 、sed -r
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
文章標(biāo)題:正則sed/awk的用法-創(chuàng)新互聯(lián)
URL鏈接:http://www.rwnh.cn/article16/ceeogg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、定制網(wǎng)站、App開(kāi)發(fā)、網(wǎng)站制作、搜索引擎優(yōu)化、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容