Linux文本處理三劍客之grep詳解

目錄:git

 1、簡介正則表達式

 2、grep詳解bash

  1.grep用法及經常使用選項ide

  2.正則表達式工具

   2.1正則表達式簡介和分類ui

   2.2基本正則表達式在grep中的做用spa

   2.3grep示例文檔

   2.4擴展正則表達式在egrep的做用字符串

   2.5egrep示例it

   2.6其餘


1、簡介

grepGloballysearch a Regular Expression and Print)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。

grep是有家族的,家族成員以下:

  1grep,默認支持基本正則表達式

  2egrep,支持擴展正則表達式

  3fgrep,不支持正則表達式,搜索字符串的速度快


2、grep詳解

 1.grep用法及經常使用選項

grep  [options] ‘pattern’  FILE
經常使用選項(options):
  -v:反向選取,只顯示不符合模式的行
  -o:只顯示被模式匹配到的字串,而不是整個行
  -i:不區分字符大小寫
  -A n:顯示匹配到的行時,順帶顯示其後面的n行
  -B n:顯示匹配到的行時,順帶顯示其前面的n行
  -C n:顯示匹配到的行時,順帶顯示其先後的n行
  -E:使用擴展的正則表達式,至關於 egrep

 2.正則表達式

  2.1正則表達式的分類

   正則表達式是一類字符所書寫的模式(pattern),該類字符被稱爲元字符,它不表示字符自己的意義,而用於額外功能性的描述。

 正則表達式分爲兩種,分別是基本正則表達式和擴展正則表達式。

2.2基本正則表達式在grep的做用

 注意:基本正則表達式默認是工做在貪婪模式(儘量長地去匹配符合模式的內容)

^ :錨定行首符合條件的內容,用法格式 」^pattern」
$ :錨定行尾符合條件的內容,用法格式 」pattern$」
^$:兩項結合能夠匹配空白行
. :匹配任意單個字符
* :匹配緊挨在其前面的字符任意次
.*:匹配任意長度的任意字符
[] :匹配指定範圍內的任意單個字符
[^] :匹配指定範圍外的任意單個字符
\? :匹配緊挨在其前面的字符0次或1次
\{m\}  :精確匹配m次
\{m,\} :匹配至少m次
\{m,n\} :匹配其前面的字符至少m次,至多n次
\< :錨定詞首,用法格式 --> \<pattern
\> :錨定詞尾,用法格式 --> pattern\>
\(\):分組,用法格式 --> \(pattern\)
 
相關字符集合:
[:digit:] : 全部數字, 至關於0-9
[:lower:] : 全部的小寫字母
[:upper:] : 全部的大寫字母
[:alpha:] : 全部的字母
[:alnum:] : 至關於[0-9a-zA-Z]
[:space:] : 空白字符
[:punct:] : 全部標點符號

  2.3grep示例

  (1)匹配/etc/passwd包含‘root’字符串的行

#  grep --color=auto 'root' /etc/passwd

  (2)匹配/etc/passwd‘root’字符串開始的行

# grep --color=auto'^root' /etc/passwd

  (3)匹配/etc/passwd‘bash’字符串結尾的行

# grep --color=auto 'bash$' /etc/passwd

  (4)查找/etc/rc.d/rc.sysinit中有多少個空白行

# grep"^$" /etc/rc.d/rc.sysinit | wc -l

  (5)匹配grep.txt中符合任意個a後面跟着個b的行

#grep --color=auto "a*b" grep.txt

  (6)匹配/etc/passwd字符r後面跟着任意個字符以後緊跟着字符h的行

# grep --color=auto"r.*h" /etc/passwd

  (7)匹配/etc/passwd以字符r開頭後面跟着任意個字符以後緊跟着以字符h結尾的行

# grep --color=auto"^r.*h$" /etc/passwd

  (8)匹配/etc/passwd字符r後面跟着個數字再跟着任意個字符再緊跟着字符h的行

# grep"r[0-9].*h" /etc/passwd

  (9)匹配grep.txt出現0次或1次個a後面跟着個b的行

# grep"a\?b" grep.txt

  (10)匹配grep.txt出現3a後面跟着個b的行

# grep --color=auto 「a\{3\}b」 grep.txt

  (11)顯示/etc/rc.d/rc.sysinit#開頭,且後面跟一個或多個空白字符,然後又跟了任意非空白字符的行

# grep --color=auto ^#[[:space:]]\{1,\}[^[:space:]]/etc/rc.d/rc.sysinit

  (12)顯示/etc/rc.d/rc.sysinit中符合形爲「任意單個字符n任意字符任意單個字符n」模式的行;即任意單個字符後面跟了個nn後面有任意長度的任意字符,然後是任意單個字符後面跟了個n,但後面的n以前的字符要與前面的n以前的字符相同

# grep --color=auto 「\(.n\).*\1」 /etc/rc.d/rc.sysinit

  (13)顯示/etc/rc.d/rc.sysinitboo爲詞首的單詞

# grep --color=auto 「\<boo」 /etc/rc.d/rc.sysinit

  2.4擴展正則表達式在grep的做用

^ :錨定行首的符合條件的內容,用法格式 」^pattern」
$ :錨定行尾的符合條件的內容,用法格式 」pattern$」
. :匹配任意單個字符
[ ] :匹配指定範圍內的任意單個字符
[^] :匹配指定範圍外的任意單個字符
* :匹配緊挨在其前面的字符任意次
+ :匹配其前面的字符至少1次
? :匹配緊挨在其前面的字符0次或1次
{m,n} :匹配其前面的字符至少m次,至多n次
( ) :分組
a|b:二選一
\< :錨定詞首,用法格式--> \<pattern
\> :錨定詞尾,用法格式--> pattern\>

 2.5egrep示例

 (1)匹配grep.txta出現1次以上後面跟着個b的行

# egrep--color=auto 「a+b」 grep.txt

 (2)匹配grep.txta出現0次或者1次後面跟着個b的行

# egrep--color=auto 」a?b「 grep.txt

 (3)匹配/proc/cpuinfovendor或者stepping的行

# egrep--color=auto "(vendor|stepping)" /proc/cpuinfo

 2.6其餘

  在egrep中其餘和grep相同用法的正則匹配就不在這裏演示了。關於命令的相關選項請找man文檔。

相關文章
相關標籤/搜索