正則表達式和文本處理工具grep,egrep

正則表達式(Regular Expression)是通過一些特殊字符的排列,來表示控制或者通配的功能,用于查找,替換,刪除一行或者多行文字字符串,是用在字符處理上的一項表達式,有時候我們可通過表達式來篩選出我們所需要的信息。

正則表達式分為兩類:基本正則表達式(BRE)和擴展的正則表達式(ERE)

正則表達式基本上是一種“表示法”,只要工具程序支持這種表示法,那么該工具就可以用來做字符串處理,例如vim,grep,awk,sed….等

基本正則表達式的元字符:

我們這里基本正則表達式的元字符和giobbing的元字符有些相似,也有些不同.這里我們應該忘記giobbing的元字符來重新學習正則表達式的元字符,這里不能混淆!giobbing只是shell里面支持的文件名通配

字符匹配:

.:匹配任意單個字符;

[ ]:匹配指定范圍的任意單個字符;

[^]:匹配指定范圍之外的任意單個字符;

匹配的字符集:

[:digit:];所有的數字

[:lower:];所有的小寫字母

[:upper:];所有的大寫字母

[:alpha:];所有的字母

[:punct:];所有標點符號

[:space:];空白字符

[:alunm:];所有字母和數字

匹配次數

要用在指定出現次數字符的后面,用于限制其前面字符出現的次數;默認工作在貪婪模式中

*:匹配其前面的字符任意次;0次1次或者多次

例如:grep "t*b"

txxbb:匹配;t有出現一次

yxb:匹配;t有出現0次

tttttttpb :匹配;t有出現多次

abc:匹配;t有出現0次

\?:匹配其前面的字符0次或1次,即前面的字符可有可無;
\+:匹配其前面的字符1次或者多次,即前面的字符至少要出現一次;
\{m\}:匹配其前面的字符m次;
\{m,n\}:匹配其前面的字符至少m次;至多n次;

\{0,n\}:至多n次;

\{m,\}:至少m次;

位置錨定;用來控制匹配字符串的位置

^:行首錨定;用于匹配模式的最左側;
$:行尾錨定;用于匹配模式的最右側

兩者結合就表示錨定的是空白行

^$:空白行

^[[:space:]]*$:空白行或者包含了空白行的字符

我們這里也可以使用\<PATTERN\>來匹配完整的單詞

需要強調的是我們這里所指的單詞是由非特殊字符組成的連續字符或字符串都稱為單詞

詞首和詞尾的錨定也可以使用另一種方式來錨定,這里要用到上面單詞匹配的模式由轉義符\加><或者b來表示;

\<或者\b:詞首錨定;用于單詞模式的左側

\>或\b:詞尾錨定;用于單詞模式的右側

分組及引用

如果我們需要匹配兩個字符而且出現多次怎么辦?這里我們就要用到分組

分組可以用括號括起來,但是括號在bash的命令行里面是有特殊含義的,所以我們這里需要用到轉義符\

\(\):將一個或者多個字符捆綁在一起,當做一個整體

\(xy\)*ab

這里就表示xy這組符號要出現0次或者多次

分組括號里面的模式匹配到的內容還可以被引用,其內容會被正則表達式引擎自動記錄到內部變量中;需要引用的話要用到\1,\2,\3,…..等等

\1:表示從模式左側起,第一個左括號和與之匹配的右括號之間被模式匹配到的字符

\2:表示從模式左側起,第二個左括號與之匹配的右括號之間被模式匹配到的字符

\3:…….

文本處理工具grep

在Linux里面所有的配置文件都是以純文本格式來展現出來的,所以在Linux里面文本的處理是及其重要的,可以幫助我們更好的提高效率

Linux上有文本處理工具三劍客,他們各自都有著強大的文本處理能力

awk:文本報告生成器

sed:流編輯器,文本編輯工具

grep:文本過濾工具

今天主要講grep(Global search REgular expression and print out line)

作用:文本搜索工具,根據用戶指定的“模式”也就是過濾條件來對目標文件進行逐行匹配并打印匹配到的行

grep工具可以分為三類:

1.grep:支持基本的正則表達式

2.egrep:支持擴展的正則表達式

3.fgrep:不支持正則表達式

這前兩個都可以加選項來表示轉換為另外兩個;(grep -E)=egrep ;(grep -F)=fgrep;(egrep -G,-F)

grep命令

grep:文本過濾工具
    grep  [OPTIONS]  PATTERN  [FILE...]
    grep  [OPTIONS]  [-e PATTERN | -f FILE]  [FILE...]
    --color=auto:對匹配到的文本著色高亮顯示
    -i:igorecase,忽略字符的大小寫
    -o:僅顯示匹配到的字符串本身
    -v:顯示不能被模式匹配到的行
    -E:支持使用擴展正則表達式元字符
    -q:--quit,靜默模式,即不輸出任何信息
    -A #:顯示匹配到的行后#行
    -B #:顯示匹配到的行前#行
    -C #:顯示匹配到的行前后各#行
    gerp默認只顯示匹配到的行

egrep:支持擴展的正則表達式來實現類似于grep的文本過濾工具
    egrep [OPTIONS] PATTERN [FILE...]
    -i:
    -o:
    -v:
    -q:
    -A:
    -B:
    -C:
    -g:支持基本正則表達式

fgrep:不支持正則表達式元字符
    當不需要用到正則表達式字符編寫模式的時候,使用fgrep能更好

文本查看及處理工具

wc:文本統計
    wc  [OPTION]...  [FILE]...
    -l:lines;統計有多少行
    -w:words;統計有多少單詞
    -c:bytes;統計有多少字節

cut:以某個字符段來切割顯示文件內容
    cut OPTION... [FILE]...
    -d CHAR:以指定的字符為分隔符;
    -f FILEDS:要挑選出的字符串 
        \#:指定的單個字符;
        \#-\#:連續的多個字段;
        \#,\#:離散的多個字段;

sort:對文本進行排序并輸出
    sort  [OPTION]...  [FILE]...
    -n:基于數值大小而非字符進行排序;
    -t CHAR:指定分隔符
    -k \#:用于排序比較的字段;
    -r:逆序排列;
    -f:忽略字符大小寫;
    -u:重復的行只保留一份

uniq:報告或者移除重復的行
    uniq [OPTION]... [INPUT [OUTPUT]]
    -c:顯示每行的重復次數
    -u:僅顯示沒有重復的行
    -d:僅顯示重復過的行

duff:逐行進行比較文件
    diff [OPTION]... FILES

練習

新建文件lovers.txt;匹配以l開頭中間有兩個任意字符并以e結尾的字符串后面可以為任意長度的任意字符的行看那個匹配

        He loves his lover.
        He likes his lover.
        She likes her liker.
        She loves her liker.

grep “\(l..e\).*” lovers.txt

練習:

1、顯示/etc/passwd文件中不以/bin/bash結尾的行;

grep -v "\(/bin/bash\)$" /etc/passwd

2、找出/etc/passwd文件中的兩位數或三位數;

grep "\<[0-9]\{2,3\}\>" /etc/passwd

3.找出/etc/rc.d/rc.sysinit或/etc/grub2.cfg文件中,以至少一個空白字符開頭,且后面非空白字符的行;

grep "^[[:space:]]\+[^[space:]]" /etc/grub2.cfg

4.找出"netstat -tan"命令的結果中以'LISTEN'后跟0、1或多個空白字符結尾的行;

netstat -tan | grep "\<LISTEN\>[[:space:]]*"

原創文章,作者:N24-執念,如若轉載,請注明出處:http://www.www58058.com/64285

(0)
N24-執念N24-執念
上一篇 2016-12-20
下一篇 2016-12-20

相關推薦

  • sed 和 vim 的 用法

    處理文本的工具 三劍客之 sed sed是一種流編輯器,它一次處理一行內容。處理時,把 當前處理的行存儲在臨時緩沖區中,稱為“模式空間”( pattern space),接著用sed命令處理緩沖區中的內容 ,處理完成后,把緩沖區的內容送往屏幕。接著處理下一 行,這樣不斷重復,直到文件末尾。文件內容并沒有改變 ,除非你使用重定向存儲輸出。Sed主要用來自動編輯…

    Linux干貨 2016-08-12
  • 馬哥教育第20期一班第一周作業

    一、利用echo將下圖弄成閃爍;字體自帶顏色且有下滑線? [root@centos7 ~]# echo -e "\033[31m\033[4m\033[5m\0052\0052\0052\0052\0052\0052\0052\n \0052\0052\0052\0052\0052\n &…

    Linux干貨 2016-07-29
  • 部分基本的文本處理工具

    一、   抽取文本的命令     1、cat     cat [option]… [file]…     常用選項:         -E &nb…

    Linux干貨 2016-08-05
  • LVM應用

    1、創建一個2G的文件系統,塊大小為2048byte,預留1%可用空間,文件系統ext4,卷標為TEST,要求此分區開機后自動掛載至/test目錄,且默認有acl掛載選項 ·首先在虛擬機當中添加指定大小的硬盤,添加完成后,系統不會自動掃描添加的硬盤設備,鍵入命令重新掃描SCSI總線來添加設備   echo "- – -&quo…

    Linux干貨 2016-08-30
  • bash腳本編程基礎知識

    shell腳本語言編程之bash shell簡介 什么是shell:     shell是Linux的用戶界面,提供了用戶與內核進行交互的接口,他接收了用戶的指令,并將指令送入內核去執行     shell即是一種高級程序語言,也是一種命令解析語言   &nb…

    Linux干貨 2016-08-15
  • 初識linux的進程管理與作業控制(第十二天)

         進程:linux中,運行每一個二制進程序或觸發每一個事件,系統都會將它定義為一個進程,并給一個進程號,稱為PID。同時依據觸發這個進程的用戶與相關屬性關系,給予這個PID一組有效的權限設置。          &nbsp…

    Linux干貨 2016-06-01
欧美性久久久久