正則表達式和文本處理工具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 15:03
下一篇 2016-12-20 16:55

相關推薦

  • linux中用ACL實現靈活的權限管理

    ACL是什么?? ACL英文原意是Access Control List(訪問控制列表).它能夠實現靈活的權限管理,除了文件的所有者,所屬組和其他人,設置相應的權限外,ACL允許你給任何用戶或是用戶組設置任何文件/目錄的訪問權限(注意的是有些不支持數字模式的權限給定) ACL有什么用?? 作為UGO權限管理的補充,acl有GUO辦不到或者是難以辦到的功能 &…

    Linux干貨 2016-08-05
  • N25_第一周_yecho

    ???

    Linux干貨 2016-12-01
  • 目錄,inode學習筆記

    目錄,inode學習筆記 1. 關于目錄,文件,數據塊 對于使用計算機的人而言,經常有一種 錯誤的認知:目錄(或者說,文件夾)里面存放著文件。實際上,目錄里面并不存放文件,以及文件數據。 實際上,目錄是一個特殊的文件,針對這個特殊的文件也存在一些特殊的規則,比如利用命令cp /dev/null <your directory>…

    Linux干貨 2017-04-01
  • Linux系統認知

    前言 在認識Linux系統之前先介紹下計算機的組成構造及其功能: 1,簡單來說計算機可以劃分為軟件系統和硬件系統: (1)軟件系統自不必說就是各種不同的程序,協助用戶更好地使用電腦。 (2)硬件系統指的是主機、顯示器、鼠鍵等硬件設備。 2,按馮諾依曼體系可將計算機按邏輯構成分為: (1)CPU(運算器、控制器)。運算器是數據處理裝置,用來完成對數據的算術運算…

    Linux干貨 2016-09-20
  • Linux進程及作業控制

    inux進程 進程的概念 當一個系統啟動時,剛開機是第一個運行的是內核代碼!先把內核放到cpu上運行,等內核控制和掌管了一切,有內核啟動進程!然后創建第一個進程 init進程  內核空間 用戶空間也都已被創建成功!后期的一切管理工作都由init來負責 init不能代表系統完成一些內核特權的執行!但由他負責向內核提交 他…

    Linux干貨 2016-09-10
  • Linux 之LVM

    一 LVM 簡介:     LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,LVM將一個或多個硬盤的分區在邏輯上集合,相當于一個大硬盤來使用,當硬盤的空間不夠使用的時候,可以繼續將其它的硬盤的分區加入其中,這樣可以實現磁盤空間的動態管理,相對于普通的磁盤分區有很大的靈活性。LVM的工作原理其…

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