正則表達(dá)式及文本處理

正則表達(dá)式及文本處理

通俗點(diǎn)說(shuō)慕嚷,正則表達(dá)式就是處理字符串的方法圆米,更加快速簡(jiǎn)潔的代表各個(gè)要求參數(shù)吊输,一般用于描述字符排列和匹配模式的一種語(yǔ)法規(guī)則,通過(guò)正則表達(dá)式一些特殊符號(hào)的輔助激率,讓用戶輕易的查找唇聘、刪除、替換一些字符串的處理程序柱搜。( ps:正則表達(dá)式和通配符不一樣,通配符代表的是bash接口的一個(gè)功能剥险,但正則表達(dá)式是一種字符串處理的表達(dá)方式聪蘸,兩者一定要分清楚。)


正則表示支持很多命令表制,例如:grep,sed.awk,vim,less,nginx,varnish等等命令,它分為兩類:

1. 一種是基本正則表達(dá)式(BRE)

2. 一種是擴(kuò)展正則表達(dá)式(ERE)

下面介紹下基本正則表達(dá)式的元字符健爬,分字符又分四類:

1. 字符匹配

2. 匹配次數(shù)

3. 位置錨定

4. 分組

字符匹配

.? 表示任意單個(gè)字符

例如:

[ ]?? 表示匹配范圍內(nèi)的任意單個(gè)字符([abc]r 相當(dāng)于r一個(gè)個(gè)匹配里面的,如ar,br,cr)

例如:

[^ ]? 表示匹配范圍外的任意單個(gè)字符

[:alpha:]?? 任意一個(gè)字母(相當(dāng)于a-zA-Z)

[:upper:]? 任意一個(gè)大寫字母(相當(dāng)于A-Z)

[:lower:]? 任意一個(gè)小寫字母(相當(dāng)于a-z)

[:digit:]???任意一個(gè)數(shù)字(相當(dāng)于0-9)

[:space:]? 水平和垂直的空白字符(比blank包含的更多)

[:blank:]?? 空白字符(空格和制表符)

[:punct:]? 標(biāo)點(diǎn)符號(hào)

[:alnum:]?? 任意字母和數(shù)字(相當(dāng)于0-9a-zA-Z)

[:print:]?? 可打印字符

例如:字符的使用

(ps:用的時(shí)候記得加[]么介,例如:[[:alnum:]]或者[0-9a-zA-Z]這樣用娜遵,當(dāng)然最好還是用[[:alnum:]]這種命令,它會(huì)比[a-z0-9A-Z]更為確定一些壤短,在這里漢字也為字母)

匹配次數(shù)

*?? 表示*號(hào)前面的一個(gè)字符的0-N次(它有一個(gè)貪婪模式设拟,會(huì)盡量匹配最長(zhǎng))

例如:

.*?? 表示任意多個(gè)長(zhǎng)度的字符

\???? 表示\?符號(hào)前的字符0-1次

例如:

\+???? 匹配\+前的字符至少1次

例如:

\{m,n}??? 表示\{m,n\}符號(hào)前的字符的m-n次

\{m\}??? ?表示{m\}符號(hào)前的字符m次

\{n,\}??? ?表示匹配前面字符至少n次

\{,n}???? ?表示匹配前面字符最多n次

例如:

(ps: \的意義是轉(zhuǎn)義字符,意思就是將一些有特殊符號(hào)的意義去除)

位置錨定

^ 之后接字符??? 表示^ 之后的字符出現(xiàn)在行首

例如:

$ 之前接字符??? 表示$之前的字符出現(xiàn)在行尾

例如:

\>????? 表示\> 符號(hào)之后的字符出現(xiàn)在單詞的尾部

\<????? 表示\< 之前的字符出現(xiàn)在單詞的首部

\<字符 \>????? 表示只有小于號(hào)和大于號(hào)之間的字符

例如:

(ps:\b 同樣可以用于匹配單詞位置久脯,只不過(guò)有時(shí)候怕不好區(qū)別纳胧,最好還是用大于小于,這樣也方便看清)帘撰。

分組

分組簡(jiǎn)單來(lái)說(shuō)就是\(\)用一個(gè)命令將一個(gè)或者多個(gè)字符捆綁在一起跑慕,當(dāng)成一個(gè)整體進(jìn)行處理,如:\(abc)+

例如:

分組括號(hào)中的模式匹配到的內(nèi)容會(huì)被正則表達(dá)式引擎記錄于內(nèi)部的變量中,這些變量的命名方式為: \1,\2,\3, ...,\1表示從左側(cè)起第一個(gè)左括號(hào)以及與之匹配右括號(hào)之間的模式所匹配到的字符

\示例:grep \(r..t\).*\(a..b\) \1 \2

\1 :r..t

\2 :a..b

例如:第一個(gè)括號(hào)為\(r..t\) 那么\1也是r..t

或者:\|

示例:a\|b: a或b

C\|cat: C或cat

\(C\|c\)at:Cat或cat

例如:

{ps:有時(shí)候命令需要整體括起來(lái),加雙引號(hào)“”}


擴(kuò)展正則表達(dá)式

擴(kuò)展正則表達(dá)式和基本正常表達(dá)式的功能是類似的核行,包括基本正則表達(dá)式的字符匹配都是相同的牢硅,擴(kuò)展正則表達(dá)式照樣可以使用,不過(guò)擴(kuò)展正則表達(dá)式和基本正則表達(dá)式還是有所不同芝雪,可以說(shuō)在某些時(shí)候更加簡(jiǎn)單减余。

剛剛我們用的匹配次數(shù)、位置錨定绵脯、分組的命令有非常多的\佳励,如果使用多了也會(huì)看得眼花繚亂,自己有時(shí)候也會(huì)輸入錯(cuò)誤或者忘記蛆挫、漏掉\赃承。

這里我只列出和基本正則有區(qū)別的命令:

字符匹配

(和基本正則一模一樣)

匹配次數(shù)

?????? 表示悴侵?符號(hào)前的字符0-1次(在基本正則里? 表示?符號(hào)前的字符0-1次)

*??????? 表示+前面的字符至少1次 (在基本正則里\+ 匹配\+前的字符至少1次)

例如:

{m,n}?? 表示{m,n}符號(hào)前的字符的m-n次

{m}????? 表示{m}符號(hào)前的字符m次

{n,}????? 表示匹配前面字符至少n次

{,n}????? 表示匹配前面字符最多n次

位置錨定

(和基本正則一模一樣)

分組

(和匹配次數(shù)一樣瞧剖,把\全部去掉就行了)

grep (r..t).*(a..b) 1 2

\1 :r..t

\2 :a..b

(ps:\1還是要加\號(hào)的)


練習(xí)

在ifconfig 中找出其ip地址的命令。

ifconfig|grep -E “(<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>.){3}<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]>)”

例如:

grep 的常用選項(xiàng)

命令說(shuō)明:按行處理可免,輸出文件中包含搜索字符串的所有行抓于。(按關(guān)鍵字搜索)

格式:grep [-acinv] ‘搜索字符串’ filename

grep??????? 選取命令,查找

grep -i???? 忽略字符的大小寫

grep --colour??? ?高亮顯示搜索結(jié)果

grep -o z????????? 表示只顯示匹配中的字符

grep -v???????????? 表示顯示匹配外的字符行

grep -E???????????? 表示擴(kuò)展正則表達(dá)式

grep -A 數(shù)字??? ?表示匹配的字符所對(duì)應(yīng)的行數(shù)的后幾行將要被顯示出來(lái)

grep -B 數(shù)字????? 表示匹配的字符所對(duì)應(yīng)的行數(shù)的錢幾行將要被顯示出來(lái)

grep -C 數(shù)字????? 表示匹配的字符所對(duì)應(yīng)的前后幾行將要被顯示出來(lái)

grep -E =egrep?? (變量)

例子

在文件a.txt中搜索包含字符串good或glad的行:

grep -E 'g(oo|la)d' a.txt

找到以字母a結(jié)尾的單詞:

grep -E 'a[[:blank]]' a.txt

grep -E 'a\\b' a.txt

文件查看命令:

cat的常用選項(xiàng)

命令說(shuō)明:按行處理浇借,將一行消息的某段切出來(lái)捉撮。(查看文本文件)

格式:cut -d '分割字符' -f fields

cut???????? ?查看文本文件

cut -A????? 顯示所有

cut -E????? 顯示每行的結(jié)束符

cut -n???? ?加行號(hào)

cut -b????? 減去空白行(有字符的不減去,如空格妇垢,tab鍵)

cut -s??????壓縮相鄰的空行

分頁(yè)查看

more??????? ?分頁(yè)顯示(b向回翻頁(yè))

more -d???? 顯示翻頁(yè)及退出提示

less?????????? 分頁(yè)顯示(一頁(yè)頁(yè)查看文件或者輸出巾遭,可以回翻,可以搜索)

(ps:man使用的就是less分頁(yè)命令)

head的常用選項(xiàng)

head?????????? ?查看命令(不加參數(shù)默認(rèn)查看前10行)

head -n 3???? 查看命令前3行(不加n直接加數(shù)字也可以)

head -c 3?????查看命令前3個(gè)字節(jié)(回車算一個(gè)字節(jié)闯估,漢字3個(gè)字節(jié))

tail的常用選項(xiàng)

tail???????? ? ?查看命令(不加參數(shù)默認(rèn)查看后10行)

taul -c 3? ? 查看命令從后開始3個(gè)字節(jié)

tail -f????? ? 追蹤查看文件最新追加的內(nèi)容是否有變化(一般用于日志監(jiān)控)

tail -n 3??? ?查看命令從后開始3行

(ps:& 可放置后臺(tái)執(zhí)行)

wc 的常用選項(xiàng)

命令說(shuō)明:一般用于文本數(shù)據(jù)統(tǒng)計(jì)

格式:1. 行 2. 單詞 3. 字節(jié) 4. 文件名

wc -l??????? 統(tǒng)計(jì)行數(shù)

wc -w??????統(tǒng)計(jì)單詞

wc -c?????? 統(tǒng)計(jì)字節(jié)

wc -m????? 統(tǒng)計(jì)字符

sort 的常用選項(xiàng)

sort -t:?????? 指定:為分隔符(一般配合k使用灼舍,:可以更換各種分隔符, . / : % $ # 等)

sort -k:????? 指定:為分隔符的第幾列排序

sort -n?????? 數(shù)字排序

sort -r???? ???倒序

sort -f?????? ?忽略大小寫

sort -u????? ?刪除重復(fù)行

uniq 的常用選項(xiàng)

uniq????????? 合并相鄰的重復(fù)行

uniq -c????? 顯示重復(fù)的次數(shù)

uniq -d????? 只顯示重復(fù)過(guò)的行

uniq -u????? 只顯示不重復(fù)的行

(ps: 連續(xù)并且完全相同才為重復(fù))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涨薪,一起剝皮案震驚了整個(gè)濱河市骑素,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌刚夺,老刑警劉巖献丑,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異侠姑,居然都是意外死亡阳距,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門结借,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)筐摘,“玉大人,你說(shuō)我怎么就攤上這事】欤” “怎么了圃酵?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)馍管。 經(jīng)常有香客問(wèn)我郭赐,道長(zhǎng),這世上最難降的妖魔是什么确沸? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任捌锭,我火速辦了婚禮,結(jié)果婚禮上罗捎,老公的妹妹穿的比我還像新娘观谦。我一直安慰自己,他們只是感情好桨菜,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布豁状。 她就那樣靜靜地躺著,像睡著了一般倒得。 火紅的嫁衣襯著肌膚如雪泻红。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天霞掺,我揣著相機(jī)與錄音谊路,去河邊找鬼。 笑死菩彬,一個(gè)胖子當(dāng)著我的面吹牛凶异,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播挤巡,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼酷麦!你這毒婦竟也來(lái)了矿卑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤沃饶,失蹤者是張志新(化名)和其女友劉穎母廷,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體糊肤,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡琴昆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盟猖,死狀恐怖驾中,靈堂內(nèi)的尸體忽然破棺而出山卦,到底是詐尸還是另有隱情屈呕,我是刑警寧澤黎茎,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布摄凡,位于F島的核電站下面,受9級(jí)特大地震影響复颈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沥割,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一耗啦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧机杜,春花似錦帜讲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至陡叠,卻和暖如春玩郊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背枉阵。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工译红, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兴溜。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓侦厚,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親拙徽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子刨沦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容