Shell腳本正則表達式之——grep、egrep、sed(內(nèi)含多個Demo)

Grep命令

基本正則表達式實例之查找特定字符:

這里我們就以存放本機所有用戶的/etc/passwd文件做實例

成都創(chuàng)新互聯(lián)公司專注于鐵西網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供鐵西營銷型網(wǎng)站建設(shè),鐵西網(wǎng)站制作、鐵西網(wǎng)頁設(shè)計、鐵西網(wǎng)站官網(wǎng)定制、微信平臺小程序開發(fā)服務(wù),打造鐵西網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供鐵西網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

Demo1:
[root@localhost ~]# grep -n "root" /etc/passwd      //-n表示顯示行號
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

基本正則表達式實例之查找集合字符:

有重復的字符時,可使用“[ ]”來進行集合匹配,每次只匹配“[ ]”中的一個字符。

Demo2:
[root@localhost ~]# grep -n "[fn]tp" /etc/passwd
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
27:ntp:x:38:38::/etc/ntp:/sbin/nologin

基本正則表達式實例之反向選擇:

在“[ ]”中括號中添加“^”表示進行反向選擇(有一定的基礎(chǔ)的朋友肯定知道“^[ ]”表示定位行首,這里“^”內(nèi)外位置意思將完全不同。)

Demo3:
[root@localhost ~]# grep -n "^[^root]" /etc/passwd       //匹配除了以root開頭的所有選項
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
......
42:named:x:25:25:Named:/var/named:/sbin/nologin

基本正則表達式實例之轉(zhuǎn)義符:

在正則表達式中一個元字符,所以在這里需要用轉(zhuǎn)義字符“\”將具有特殊意義的字符轉(zhuǎn)化成普通字符。

Demo4:
[root@localhost ~]# grep -n '\.$' test.txt 1:he was short and fat.
2:He was wearing a blue polo shirt with black pants. 3:The home of Football on BBC Sport online.
5:google is the best tools for search keyword.

基本正則表達式實例——查找任一字符&查找重復字符:

在正則表達式中小數(shù)點(.)也是一個元字符,代表任意一個字符。

Demo5:
[root@localhost ~]# grep -n "r..t" /etc/passwd        //(.)小數(shù)點這里代表任一字符
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

在上述結(jié)果中,“root”字符串“r..t”匹配規(guī)則。若想要查詢 oo、ooo、ooooo 等資料,則需要使用星號(*)元字符。但需要注意的是,“*”代表的是重復零個或多個前面的單字符?!皁*”表示擁有零個(即為空字符)或大于等于一個“o”的字符

Demo5:
[root@localhost ~]# grep -n "oo*" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
......

基本正則表達式實例之查找連續(xù)字符范圍:

例如,查找三到五個 o 的連續(xù)字符,這個時候就需要使用基礎(chǔ)正則表達式中的限定范圍的字符“{ }”。因為“{ }”在 Shell 中具有特殊 意義,所以在使用“{ }”字符時,需要利用轉(zhuǎn)義字符“\”,將“{ }”字符轉(zhuǎn)換成普通字符。

Demo6:
[root@localhost ~]# grep -n "0\{2,\}" /etc/passwd       //表示中間包含2以上o的字符串
11:games:x:12:100:games:/usr/games:/sbin/nologin
41:zhy:x:1000:1000:zhy:/home/zhy:/bin/bash

Egrep命令

此外,grep 命令僅支持基礎(chǔ)正則表達式,如果使用擴展正則表達式,需要使用 egrep 或 awk 命令。awk 命令在后面的進行講解,這里我們直接使用 egrep 命令。egrep 命令與 grep 命令的用法基本相似。(grep命令能用的egrep命令同樣能夠使用)

擴展正則表達式元字符作用
+ 作用:重復一個或者一個以上的前一個字符
作用:零個或者一個的前一個字符
| 作用:使用或者(or)的方式找出多個字符
() 作用:查找“組”字符串
()+ 作用:辨別多個重復的組
Demo7:
[root@localhost ~]# egrep -n "10+" /etc/passwd             //使用“+”擴展元字符
11:games:x:12:100:games:/usr/games:/sbin/nologin
31:qemu:x:107:107:qemu user:/:/sbin/nologin
41:zhy:x:1000:1000:zhy:/home/zhy:/bin/bash
[root@localhost ~]# egrep -n "10?" /etc/passwd             //使用“?”擴展元字符
2:bin:x:1:1:bin:/bin:/sbin/nologin
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
[root@localhost ~]# egrep -n 'root|zhy' /etc/passwd        //使用“|”擴展元字符
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
41:zhy:x:1000:1000:zhy:/home/zhy:/bin/bash
[root@localhost ~]# egrep -n '(f|n)tp' /etc/passwd        //使用“()”擴展元字符,可與“|”一起使用
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
27:ntp:x:38:38::/etc/ntp:/sbin/nologin

Sed命令:

sed是一個很好的文件處理工具,本身是一個管道命令,主要是以行為單位進行處理,可以將數(shù)據(jù)行進行替換、刪除、新增、選取等特定工作

sed 的工作流程主要包括讀取、執(zhí)行和顯示三個過程:

1.讀取:sed 從輸入流(文件、管道、標準輸入)中讀取一行內(nèi)容并存儲到臨時的緩沖區(qū)中(又稱模式空間,pattern space)。
2.執(zhí)行:默認情況下,所有的 sed 命令都在模式空間中順序地執(zhí)行,除非指定了行的地址,否則 sed 命令將會在所有的行上依次執(zhí)行。
3.顯示:發(fā)送修改后的內(nèi)容到輸出流。再發(fā)送數(shù)據(jù)后,模式空間將會被清空。在所有的文件內(nèi)容都被處理完成之前,上述過程將重復執(zhí)行,直至所有內(nèi)容被處理完。

默認情況下,所有的sed命令都是在模式空間中進行,并不會進行保存。

Sed命令格式:

sed [選項] '操作' 參數(shù)
sed [選項] -f scriptfile 參數(shù) // scriptfile 表示腳本文件

常用選項:

-e :表示用指定命令或者腳本來處理輸入的文本文件。
-f :表示用指定的腳本文件來處理輸入的文本文件。
-h :顯示幫助。
-n:表示僅顯示處理后的結(jié)果。
-i:直接編輯文本文件。

常用的“操作”參數(shù):

a:增加,在當前行下面增加一行指定內(nèi)容。
c:替換,將選定行替換為指定內(nèi)容。
d:刪除,刪除選定的行
i:插入,在選定行上面插入一行指定內(nèi)容。
p:打印,其通常與“-n”選項一起使用
s:替換,替換指定字符。
y:字符轉(zhuǎn)換。

基本用法實例:

輸出所有,效果等同cat命令:
[root@localhost ~]# sed -n 'p' /etc/passwd                //效果等同cat命令
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
......
輸出某一特定行,或者某一段行:
[root@localhost ~]# sed -n '10p' /etc/passwd                   //輸出第10行內(nèi)容
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# sed -n '2,4p' /etc/passwd                 //輸出2~4行內(nèi)容
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
輸出奇數(shù)行:
[root@localhost ~]# sed -n 'n;p' /etc/passwd                //輸出奇數(shù)行,偶數(shù)行為p;n
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
halt:x:7:0:halt:/sbin:/sbin/halt
......

同樣,除了基本的使用方法,sed命令也可以結(jié)合正則表達式進行使用

輸出包含特定內(nèi)容的行(和grep命令一樣,可以使用^、$來定位行首、行尾):
[root@localhost ~]# sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
輸出包含特定單詞的行:
[root@localhost ~]# sed -n '/\<root\>/p' /etc/passwd           //\<  \>代表單詞邊界
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
替換符合條件的文本:

sed's/the/THE/'test.txt//將每行中的第一個the 替換為 THE
sed's/l/L/3'test.txt//將每行中的第 3 個l 替換為L
sed's/the/THE/g'test.txt//將文件中的所有the 替換為THE
sed's/o//g'test.txt//將文件中的所有o 刪除(替換為空串)
sed's/^/#/'test.txt//在每行行首插入#:號
sed'/the/s/^/#/'test.txt //在包含the 的每行行首插入#號
sed's/$/EOF/'test.txt//在每行行尾插入字符串EOF
sed'3,5s/the/THE/g'test.txt//將第 3~5 行中的所有the 替換為 THE
sed'/the/s/o/O/g'test.txt//將包含the 的所有行中的o 都替換為 O

將文本進行遷移:

sed'/the/{H;d};$G'test.txt//將包含the 的行遷移至文件末尾,{;}用于多個操作
sed'1,5{H;d};17G'test.txt//將第 1~5 行內(nèi)容轉(zhuǎn)移至第 17 行后
sed '/the/wout.file'test.txt//將包含the 的行另存為文件out.file
sed '/the/r/etc/hostname'test.txt//將文件/etc/hostname 的內(nèi)容添加到包含the 的每行以后
sed'3aNew'test.txt //在第 3 行后插入一個新行,內(nèi)容為 New
sed'/the/aNew'test.txt//在包含the 的每行后插入一個新行,內(nèi)容為 New
sed'3aNew1\nNew2'test.txt//在第 3 行后插入多行內(nèi)容,中間的\n 表示換行

網(wǎng)頁名稱:Shell腳本正則表達式之——grep、egrep、sed(內(nèi)含多個Demo)
當前網(wǎng)址:http://bm7419.com/article36/pscepg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、外貿(mào)建站、虛擬主機定制開發(fā)、自適應(yīng)網(wǎng)站、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)