免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

文本處理三劍客與正則表達式詳解

 頭號碼甲 2022-06-25 發(fā)布于北京

我們知道在 Linux 中,“一切皆文件”,作為系統(tǒng)管理員或者程序員我們每天都需要和大量的文本文件打交道。Linux 系統(tǒng)為我們提供了三個文本處理工具:grep, sed, 和 awk,它們也被稱為 Linux 文本處理的三劍客被大家廣泛使用。今天先和大家介紹一下 grep 的以及正則表達式的用法,因為 grep 只有和正則表達式結合在一起才會發(fā)揮出它強大的威力。

 

Grep 的用法

 

grep 是一個強大的文本搜索工具,可以用于在文本文件中搜索指定格式(正則表達式)的字符串,并將匹配的行輸出。它的用法如下:

#grep [選項] 查找條件 目標文件

 

比如我們有一個文本文件,littlestar.txt,它的內容如下:

TWINKLE, twinkle, little star,
How I wonder what you are!
Up above the world so high,

Like a diamond in the sky.

 

(1) 查找一個字符串

比如要查找“twinkle”

#grep "twinkle" littlestar.txt

匹配上的字符串用紅色突出顯示出來了。

 

(2) “-i”忽略大小寫

#grep -i "twinkle" littlestar.txt

結果可以看到TWINKLE 和 twinkle 都匹配上了

 

(3) “-n”顯示行號

#grep -n "twinkle" littlestar.txt

發(fā)現在結果的最左側顯示行號

 

(4) “-c”僅顯示匹配到的行號

#grep -c "twinkle" littlestar.txt

結果僅顯示 1,表示第 1 行匹配到了查找的字符串

 

(5) “-o” 僅顯示匹配到的字符串,不顯示同行的其他內容

#grep -o "twinkle" littlestar.txt

結果僅顯示 twinkle

 

(6) “-w”精確匹配單詞

#grep -w "twinkle" littlestar.txt      查找twinkle

#grep -w "twink" littlestar.txt        查找twink

結果顯示完整的單詞 twinkle 可以匹配到,如果只查找 twink 則沒有匹配上

 

(7) “-v“ 反轉查找,顯示不包含關鍵字的行

#grep -v "twink" littlestar.txt

結果除了第一行,其他都匹配成功了

 

正則表達式

 

正則表達式(Regular Expression)是一種描述字符串匹配模式的方式,它的應用非常廣泛,幾乎所有的主流編程語音里都有正則表達式的實現,比如 Java,C#,Python等等,當然 Linux 的 Shell 對它也有很好的支持。我們很多時候想要做的是模糊查找,比如以133開頭的手機號,這個時候 grep 就需要用到正則表達式了。

 

正則表達式有兩個版本,基本正則表達式(BRE)和它的升級版--擴展正則表達式(ERE)。我們主要了解一下擴展版,grep 命令需要加上 -E 選項,或者使用 egrep 命令。

 

正則表達式中用來匹配字符串模式的字符被稱作元字符,學習正則表達式主要就是學會元字符的組合運用。元字符主要有下面幾種:

 

  • 用于位置錨定:"^" 和 "$"

  • 用于字符匹配:".","[ ]"

  • 用于匹配次數:"*","+","?","{ }"

  • 用于分組:"( )"

     

     

可能看到這里已經有很多人一頭霧水了,正則表達式到底長什么樣呢?下面我們就看一下具體的例子吧。

 

(1) 位置錨定元字符:

^ 表示以某個字符串開頭,$ 表示以某個字符串結尾

比如查找以 “TWINK” 開頭的行

#grep -E "^TWINK" littlestar.txt      

查找以 “star,” 結尾的行

#grep "star,$" littlestar.txt     

 

(2) 字符匹配元字符:

“.”表示匹配任意單個字符,“[ ]”用來匹配指定范圍內的單個字符

比如 "s..r" 可以匹配以s開頭,r結尾的單詞

#grep "s..r" littlestar.txt      

"[ ]" 當中可以放具體的字符,比如 "[Tt]"表示匹配大寫或者小寫的 t

#grep "^[Tt]" littlestar.txt      

"[ ]" 也可以用來表示一個范圍,比如 [0-9]表示單個數字,[a-z]表示單個小寫字母,[A-Z]表示一個大寫字母。[a-zA-Z]表示一個字母,包括大小寫。比如 "[A-Z][a-z][a-z][a-z]" 表示首字母大寫,四個字母的一個單詞:

#grep -E "[A-Z][a-z][a-z][a-z]" littlestar.txt      

"^"用來表示不在指定范圍內的其他字符,比如[^a-zA-Z]表示所有非字母的字符

#grep -E "[^a-zA-Z]" littlestar.txt

 

(3)匹配次數元字符

"?" 表示匹配到 0 次或 1 次,比如 "w?in" 表示 w 被匹配到 0 次或 1 次,所以 "win" 或者 "in" 都可以被匹配到

#grep -E "w?in" littlestar.txt

 

"+" 表示匹配到至少 1 次,比如 "w+in" 就表示至少得有一個字母 w,可以是 "win" 或者 "wwin",但是 "in" 就不能匹配上了

#grep -E "w+in" littlestar.txt

 

"*" 表示匹配到任意次,可以是 0 次,可以是 1 次,也可以是多次,比如 "w*in" 可以匹配到 "in",也可以匹配到 "win" 或者 "wwin"

#grep -E "w*in" littlestar.txt

 

"*" 經常與 "." 搭配使用,".*" 表示匹配任意數量的任意字符,比如 "T.*E" 可以匹配到任何以 T 開頭,以 E 結尾的單詞

#grep -E "T.*E" littlestar.txt

 

"{ }" 可以用于表示明確的匹配次數,比如 "lit{2}le",就表示 "little",中間要匹配 2 個字母 t

#grep -E "lit{2}le" littlestar.txt

"{ }" 也可以指定一個匹配次數的范圍,比如 "{2,3}" 表示匹配 2 次到 3 次,"{2, }" 表示匹配至少 2 次,最多則不限

#grep -E "lit{2,}le" littlestar.txt 

 

(4) 分組元字符

"( )" 可以將幾個字符組合在一起作為一個整體處理,比如我們想對 "twinkle," 這個字符串做為一個整體,匹配它是否出現過兩次,可以寫成 "(twinkle){2}"

#grep -E -i "(twinkle,){2}" littlestar.txt

 

最后

 

文本處理往往是需要命令行工具和正則表達式結合使用。正則表達式相對來說比較抽象,但實際上正則表達式的使用就是對元字符的組合運用,所以掌握每個元字符對學好正則表達式至關重要。

 

 

 

 

- The End -

 

 

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多