linux正則表達式

        正則表達式旨在對字符串進行匹配,這在幾乎全部語言中都有用到。固然bash中天然也不例外。linux支持正則表達式的工具主要有一下幾種,即:vim、grep、awk、sed等等。首先對這些命令作一下簡單的介紹。linux

 

        grep命令用以以行爲單位,對字符串進行匹配,輸出符合匹配邏輯的行。grep的使用權限是全部用戶。正則表達式

  • 格式:grep [OPTIONS] PATTERN [FILE...]
  • 主要參數:

-c:只輸出匹配行的計數。vim

-I:不區分大 小寫(只適用於單字符)。bash

-h:查詢多文件時不顯示文件名。app

-l:查詢多文件時只輸出包含匹配字符的文件名。函數

-n:顯示匹配行及 行號。工具

-s:不顯示不存在或無匹配文本的錯誤信息。this

-v:顯示不包含匹配文本的全部行。google

  • 示例:
grep -n 'the' test.txt #n顯示行號

8:I can't finish the test.

12:the symbol '*' is represented as start.

15:You are the best is mean you are the no. 1.

16:The world <Happy> is the same with "glad".

18:google is the best tools for search keyword.
grep -nvi 'A' test.txt #v是選擇不知足條件的項、i不區分大小寫

4:this dress doesn't fit me.

13:Oh! My god!

17:I like dog.

19:goooooogle yes!

20:go! go! Let's go.

 

      sed命令一樣是以行爲單位處理字符串,可是它能夠對字符串進行增刪改操做,而後輸出至屏幕或者是文件spa

  • 格式:sed [OPTION]... {script-only-if-no-other-script} [input-file]
  • 主要參數:

-n :使用安靜(silent)模式。在通常 sed 的用法中,全部來自 STDIN 的數據通常都會被列出到終端上。但若是加上 -n 參數後,則只有通過sed 特殊處理的那一行(或者動做)纔會被列出來。 -e :直接在命令列模式上進行 sed 的動做編輯; -f :直接將 sed 的動做寫在一個文件內, -f filename 則能夠運行 filename 內的 sed 動做; -r :sed 的動做支持的是延伸型正規表示法的語法。(默認是基礎正規表示法語法) -i :直接修改讀取的文件內容,而不是輸出到終端。

  • 函數:

a :新增,在下一行新增字符串 c :取代, c 的後面能夠接字串,這些字串能夠取代 n1,n2 之間的行! d :刪除, i :插入,在上一行新增字符串 p :列印,在每一行後面輸出字符串 s :替換,相似vim的替換

  • 示例:
nl /etc/passwd | sed '2,5d' #按行打印passwd,刪除2至5行

1 root:x:0:0:root:/root:/bin/bash

6 games:x:5:60:games:/usr/games:/usr/sbin/nologin

7 man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
nl /etc/passwd | sed '2a hello' #在第三行加上hello

1 root:x:0:0:root:/root:/bin/bash

2 daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

hello
nl /etc/passwd | sed -n '5,7p' #至關於 nl /etc/passwd | head -n 7 | tail -n 3

5 sync:x:4:65534:sync:/bin:/bin/sync

6 games:x:5:60:games:/usr/games:/usr/sbin/nologin

7 man:x:6:12:man:/var/cache/man:/usr/sbin/nologin

 

        介紹了使用正則的幾個命令,接下來就是正則表達式的基本語法:

基礎正則表達式匹配模式:

[abc]:知足方括號其中一個

[a-z]:全體小寫字母

[A-Z]:全體大寫字母

[0-9]:全體數字 #在ascii表中連續就能夠如此標示

[^]:對條件取反 #方括號裏

^:行首 #eg. ^the:以the單詞開頭的行

$:行末 #eg. \!$:以歎號結尾的行

.:任意一個符號

*:前一個符號重複任意屢次(0~無窮)

{2}:限定前一符號重複次數(重複2次)

{2,5}:重複2-5次

 

    上面是這些模式是grep等工具經常使用的匹配模式,固然這些有時候並不能知足咱們的須要。所以,還有延伸正則表達式。

+:前一個字符重複一次以上
?:零個或者是一個字符
|:或
():意義:找出「羣組」字串	範例:搜尋	(glad)或	(good)這兩個字串,由於g與d是重複的,因此我就能夠將la與oo列於(la|oo)當中。

    要使用這些匹配模式,須要用到egrep命令,至關與grep -e

egrep	-n	'go+d'	test.txt

egrep	-n	'go?d'  test.txt

egrep	-n	'gd|good'	test.txt	

egrep	-n	'gd|good|dog'	test.txt	

egrep	-n	'g(la|oo)d'	test.txt	

echo	'AxyzxyzxyzxyzC'	|	egrep	'A(xyz)+C'
相關文章
相關標籤/搜索