Shell正則表達(dá)式中g(shù)rep、sed、awk怎么用-創(chuàng)新互聯(lián)

這篇文章主要介紹了Shell正則表達(dá)式中g(shù)rep、sed、awk怎么用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)建站是一家企業(yè)級(jí)云計(jì)算解決方案提供商,超15年IDC數(shù)據(jù)中心運(yùn)營(yíng)經(jīng)驗(yàn)。主營(yíng)GPU顯卡服務(wù)器,站群服務(wù)器,成都托管服務(wù)器,海外高防服務(wù)器,服務(wù)器機(jī)柜,動(dòng)態(tài)撥號(hào)VPS,海外云手機(jī),海外云服務(wù)器,海外服務(wù)器租用托管等。

首先先復(fù)制一段范例:


代碼如下:

# vi regular_express.txt
-------------------------------
"Open Source" is a good mechanism to develop programs.
apple is my favorite food.
Football game is not use feet only.
this dress doesn't fit me.
However, this dress is about $ 3183 dollars.
GNU is free air not free beer.
Her hair is very beauty.
I can't finish the test.
Oh! The soup taste good.
motorcycle is cheap than car.
This window is clear.
the symbol '*' is represented as start.
Oh!My god!
The gd software is a library for drafting programs.
You are the best is mean you are the no. 1.
The world <Happy> is the same with "glad".
I like dog.
google is the best tools for search keyword.
goooooogle yes!
go! go! Let's go.
# I am VBird
--------------------------------

設(shè)置語(yǔ)系為C


代碼如下:

#export LANG=C

grep

1.搜尋特定字符串"the"
注: n為顯示行號(hào)


代碼如下:

# grep -n 'the' regular_express.txt

2.反向搜尋特定字符串"the"


代碼如下:

# grep -vn 'the' regular_express.txt

3.取得任意大小寫"the"的這個(gè)字符串


代碼如下:

# grep -in 'the' regular_express.txt

4.利用括號(hào) [] 來(lái)搜尋集合字符
搜索test或taste這兩個(gè)單詞時(shí),發(fā)現(xiàn)他們有共同的't?st',所以可以這么搜尋


代碼如下:

# grep -n 't[ae]st' regular_express.txt

這樣其實(shí)就是在找t[a]st和t[e]st這兩個(gè)分開的字符
如果搜索有 oo 的字符時(shí),則可以使用:


代碼如下:

# grep -n 'oo' regular_express.txt

如果搜索oo時(shí)不想搜到 oo 前面有 g 的話,我們可以利用反向選擇[^]來(lái)達(dá)成:


代碼如下:

# grep -n '[^g]oo'  regular_express.txt

如果搜索oo前面不想有小寫字符,則:


代碼如下:

# grep -n '[^a-z]oo' regular_express.txt

注: 大寫英文/小寫英文/數(shù)字 可以使用 [a-z]/[A-Z]/[0-9]等方式來(lái)書寫,也可以寫在一起
[a-zA-Z0-9]表示要求字符串是數(shù)字以及英文
如果我們要取得有數(shù)字的那行,則:


代碼如下:

# grep -n '[0-9]' regular_express.txt

注:但考慮到語(yǔ)系對(duì)編碼順序的影響,因此除了連續(xù)編碼使用減號(hào)[-]外,也可以用[:lower:]代替a-z 以及 [:digit:] 代替0-9 使用


代碼如下:

# grep -n '[^[:lower:]]oo' regular_express.txt
# grep -n '[[:digit:]]' regular_express.txt

5.顯示行首為'the'的字符串


代碼如下:

# grep -n '^the' regular_express.txt

顯示行首是小寫字符


代碼如下:

# grep -n '^[a-z]' regular_express.txt

6.顯示行尾為點(diǎn) . 的那一行


代碼如下:

# grep -n '\.$' regular_express.txt

7.顯示5-9行數(shù)據(jù)


代碼如下:

# cat -An regular_express.txt |head -n 10 |tail -n 6

8.顯示空白行


代碼如下:

# grep -n '^$' regular_express.txt

9.找出g??d字符串,起頭g結(jié)束d的四個(gè)字符串


代碼如下:

# grep -n 'g..d' regular_express.txt

10. o*代表空字符(就是有沒(méi)有字符都可以)或者一個(gè)到N個(gè)o字符,所以grep -n 'o*' regular_express.txt就會(huì)把所有行全部打印出來(lái),
11.oo*代表o+空字符或者一個(gè)到N個(gè)o字符,所以grep -n 'oo*' regular_express.txt就會(huì)把o,oo,ooo等的行全部打印出來(lái)
12."goo*g"代表gog,goog,gooog...等


代碼如下:

# grep -n 'goo*g' regular_express.txt

13.找出含g...g字符串的行
注: .代表任意字符, .*則就代表空字符或者一個(gè)到N個(gè)任意字符


代碼如下:

# grep -n 'g.*g' regular_express.txt

14.找出含有數(shù)字的行


代碼如下:

# grep -n '[0-9][0-9]*' regular_express.txt

或# grep -n '[0-9]' regular_express.txt

15.找出含兩個(gè)o的字符串
注:{}因?yàn)樵趕hell里有特殊意義,所以需要加跳脫符\來(lái)讓其失去意義


代碼如下:

# grep -n 'o\{2\}'  regular_express.txt

找出g后含2到5個(gè)o然后以g結(jié)尾的字符串


代碼如下:

# grep -n 'go\{2,5\}g'  regular_express.txt

找出g后含2以上的o然后以g結(jié)尾的字符串


代碼如下:

# grep -n 'go\{2,\}g'  regular_express.txt

總結(jié):
^word     表示帶搜尋的字符串(word)在行首
word$     表示帶搜尋的字符串(word)在行尾
.         表示1個(gè)任意字符
\         表示轉(zhuǎn)義字符,在特殊字符前加\會(huì)將原本的特殊字符意義去除
*         表示重復(fù)0到無(wú)窮多個(gè)前一個(gè)RE(正則表達(dá)式)字符
[list]    表示搜索含有l(wèi)ist的字符串
[n1-n2]   表示搜索指定的字符串范圍,例如[0-9] [a-z] [A-Z]等
[^list]   表示反向字符串的范圍,例如[0-9]表示非數(shù)字字符,[A-Z]表示非大寫字符范圍
\{n,m\}   表示找出n到m個(gè)前一個(gè)RE字符
\{n,\}    表示n個(gè)以上的前一個(gè)RE字符
egrep總結(jié):
+    表示重復(fù)一個(gè)或一個(gè)以上的前一個(gè)RE字符
范例:egrep 'go+d' regular_express.txt
表示搜尋(god)(good)(goood)...等等字符串,o+代表[一個(gè)以上的o]
?    表示重復(fù)零個(gè)或一個(gè)的前一個(gè)RE字符
范例:egrep 'go?d' regular_express.txt
表示搜尋(gd)(god)字符串,o?代表[空的或1個(gè)o]
注:egrep下'go+d'和'go?d'的結(jié)果集合就等于grep下的'go*d'
|    表示用或(or)的方式找出數(shù)個(gè)字符串
范例:egrep 'gd|good|dog' regular_express.txt
表示搜尋(gd)或(god)或(god)字符串,|代表或
()    表示找出群組字符串
范例:egrep 'g(la|oo)d' regular_express.txt
表示搜尋(glad)或(good)字符串
()    +表示找出多個(gè)重復(fù)群組的判別
范例: echo 'AxyzxyzxyzxyzxyzC'|egrep 'A(xyz)+C'
表示搜尋開頭是A結(jié)尾是C,中間有一個(gè)以上的'xyz'字符串

sed:

插入:

1.將/etc/passwd 的內(nèi)容列出并打印行號(hào),同時(shí),將2-5行刪除顯示


代碼如下:

# nl /etc/passwd | sed '2,5d'

注: sed是sed -e的簡(jiǎn)寫, 后接單引號(hào)
同上刪除第2行


代碼如下:

# nl /etc/passwd | sed '2d'

同上刪除第三行到最后一行


代碼如下:

# nl /etc/passwd | sed '3,$d'

2.在第二行后加上一行test

代碼如下:

# nl /etc/passwd | sed '2a test'

在第二行前加上一行test


代碼如下:

# nl /etc/passwd | sed '2i test'

在第二行后加入兩行test


代碼如下:

# nl /etc/passwd | sed '2a test \
> test'

替換行:

3.將2-5行內(nèi)容取代為 No 2-5 number

代碼如下:

# nl /etc/passwd | sed '2,5c No 2-5 number'

4 列出/etc/passwd 內(nèi)第5-7行


代碼如下:

# nl /etc/passwd |sed -n '5,7p'

替換字符串:

sed 's/被替換字符串/新字符串/g'

1.獲取本機(jī)IP的行


代碼如下:

# /sbin/ifconfig eth0 |grep 'inet addr'

將IP前面的部分予以刪除


代碼如下:

# /sbin/ifconfig eth0 |grep 'inet addr'| sed 's/^.*addr://g'

將IP后面的部分刪除


代碼如下:

# /sbin/ifconfig eth0 |grep 'inet addr'| sed 's/^.*addr://g'| sed 's/Bcast:.*$//g'
-------------------
192.168.100.74
-------------------

2.用grep將關(guān)鍵詞MAN所在行取出來(lái)


代碼如下:

# cat /etc/man.config |grep 'MAN'

刪除批注行


代碼如下:

# cat /etc/man.config |grep 'MAN'| sed 's/^#.*$//g'

刪除空白行


代碼如下:

# cat /etc/man.config |grep 'MAN'| sed 's/^#.*$//g'| sed '/^$/d'

3.利用sed將regular_express.txt內(nèi)每一行若為.的換成!
注:-i參數(shù)會(huì)直接修改文本,而并非直接輸出


代碼如下:

# sed -i 's/.*\.$/\!/g' regular_express.txt

4.利用sed在文本最后一行加入 #This is a test
注: $代表最后一行 a代表行后添加


代碼如下:

# sed -i '$a #This is a test' regular_express.txt

將selinux配置文件enforcing改成disabled


代碼如下:

# sed -i '6,6c SELINUX=disabled' /etc/selinux/config

延伸正規(guī)表示法:


代碼如下:

# grep -v '^$' regular_express.txt |grep -v '^#'

延伸寫法:


代碼如下:

# egrep -v '^$'|'^#' regular_express.txt

1. +表示重復(fù)一個(gè)或一個(gè)以上的前一個(gè)RE字符

例如:egrep -n 'go+d' regular_express.txt
普通寫法: grep -n 'goo*d' regular_express.txt

2. ?表示重復(fù)零個(gè)或一個(gè)前一個(gè)RE字符

例如: egrep -n 'go?d' regular_express.txt

3. |表示用或的方式找出數(shù)個(gè)字符串

例如: egrep -n 'gd|good' regular_express.txt

4. ()表示找出群組字符串

例如: egrep -n 'g(la|oo)d' regular_express.txt
也就是搜尋(glad)或good這兩個(gè)字符串

5. ()+多個(gè)重復(fù)群組判別

例如: echo 'AxyzxyzxyzxyzC'|egrep 'A(xyz)+C'

也就是要找開頭是A結(jié)尾是C 中間有一個(gè)以上的'xyz'字符串的意思

awk:

1.用last取出登陸數(shù)據(jù)前五行


代碼如下:

# last -n 5

取出賬號(hào)與登陸者IP,且賬號(hào)與IP之間以TAB隔開


代碼如下:

# last -n 5 |awk '{print $1 "\t" $3}'

注:$1代表用空格或TAB隔開的第一個(gè)字段,以此類推。。
  $0代表該行全部字段


代碼如下:

# last -n 5 |awk '{print $1 "\t lines:" NR "\t columes:" NF}'

注: NF代表每一行的$0的字段總數(shù)
   NR代表目前awk所處的是第幾行數(shù)據(jù)
   FS代表目標(biāo)分隔符,默認(rèn)為空格

2.在/etc/passwd中以:來(lái)作為分段字符,則我們要查閱第三欄小于10以下的數(shù)據(jù),并只列出賬號(hào)與第三欄


代碼如下:

# cat /etc/passwd | awk '{FS=":"} $3<10 {print $1 "\t \t"$3}'

注:查詢結(jié)果未顯示第一行數(shù)據(jù),是因?yàn)槲覀冸m然定義了FS=":" 但卻只能在第二行生效
想讀取第一行就需要BEGIN這個(gè)關(guān)鍵詞:


代碼如下:

# cat /etc/passwd | awk 'BEGIN {FS=":"} $3<10 {print $1 "\t \t"$3}'

df:
比較兩個(gè)文件的差異:


代碼如下:

# diff /etc/rc3.d/ /etc/rc5.d/
-------------------
Only in /etc/rc3.d/: K30spice-vdagentd
Only in /etc/rc5.d/: S70spice-vdagentd
-------------------


實(shí)例:
1。統(tǒng)計(jì)TCP連接狀態(tài)


代碼如下:

# netstat -na | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
/^tcp/

過(guò)濾出以tcp開頭的行,“^”為正則表達(dá)式用法,以...開頭,這里是過(guò)濾出以tcp開頭的行。
S[]
定義了一個(gè)名叫S的數(shù)組,在awk中,數(shù)組下標(biāo)通常從 1 開始,而不是 0。
NF
當(dāng)前記錄里域個(gè)數(shù),默認(rèn)以空格分隔,如上所示的記錄,NF域個(gè)數(shù)等于
$NF
表示一行的最后一個(gè)域的值,如上所示的記錄,$NF也就是$6,表示第6個(gè)字段的值,也就是SYN_RECV或TIME_WAIT等。
S[$NF]
表示數(shù)組元素的值,如上所示的記錄,就是S[TIME_WAIT]狀態(tài)的連接數(shù)
++S[$NF]
表示把某個(gè)數(shù)加一,如上所示的記錄,就是把S[TIME_WAIT]狀態(tài)的連接數(shù)加一
結(jié)果就是顯示S數(shù)組中最終的數(shù)組值
例:S[TIME_WAIT]=最終值 S[TESTABLISHED]=最終值
END
for(key in S)
遍歷S[]數(shù)組
print key,”\t”,S[key]
打印數(shù)組的鍵和值,中間用\t制表符分割,顯示好一些。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Shell正則表達(dá)式中g(shù)rep、sed、awk怎么用”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

網(wǎng)站名稱:Shell正則表達(dá)式中g(shù)rep、sed、awk怎么用-創(chuàng)新互聯(lián)
鏈接分享:http://bm7419.com/article4/gihie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、關(guān)鍵詞優(yōu)化、網(wǎng)站策劃、軟件開發(fā)、商城網(wǎng)站、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(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)

商城網(wǎng)站建設(shè)