Linux文本搜索工具grep

Linux文本搜索工具grep



簡介

grep(全稱Globally search a Regular Expression and Print,全面搜索正則表達式并把行打印出來)是一種強大的文本搜索工具,根據用戶指定的“模式(pattern)”對目標文本進行匹配檢查,打印匹配到的行。

 家族成員: 
  grep:支持基本正則表達式 
  egrep:相當于grep -E,支持擴展正則表達式 
  fgrep:相當于grep -F,不支持正則表達式


主要參數及使用

grep

格式: grep [OPTIONS] PATTERN [FILE…]

常用選項: 
–color=auto:對匹配的文本著色顯示 
注: CentOS 7默認設置該參數。

-v:顯示不能被pattern匹配到的行

# cat test
how are you?
hellow
# grep -v are test
hellow

提示:如test文件內容發生改變,會用cat命令將其展示,反之則表示內容不變

-i:忽略字符大小寫

# cat test
how are you?
HOW ARE YOU?
# grep are test
how are you?
# grep ARE test
HOW ARE YOU?
# grep -i are test
how are you?
HOW ARE YOU?

-o:僅顯示匹配到的字符串

# cat test
how are you?
# grep -o are test
are

-q:靜默模式,不輸出任何信息 
 靜默模式下不會輸出任何信息,命令的執行結果可以通過echo $?查詢。

# cat test
name
# grep -q name test
# echo $?
0
# grep -q what test
# echo $?
1

-A #:顯示匹配的后#行信息

# cat test
how are you?
HOW ARE YOU?
hello
# grep -A 1 ARE test
HOW ARE YOU?
hello

-B #:顯示匹配的前#行信息

# grep -B 1 ARE test
how are you?
HOW ARE YOU?

-C #:顯示匹配的前后各#行信息

# grep -C 1 ARE test
how are you?
HOW ARE YOU?
hello

基本正則表達式

正則表達式由普通字符和元字符組成。普通字符包括大小寫字母和數字,而元字符則具有特殊意義,接下來將對元字符進行介紹。

  • 字符匹配:

.:匹配任意單個字符 
Linux文本搜索工具grep

[]:匹配指定范圍內任意單個字符 
Linux文本搜索工具grep

[^]:匹配指定范圍外任意單個字符 
Linux文本搜索工具grep 
專用字符集合: 
[:digit:]:任意數字,相當于0-9 
[:lower:]:任意小寫字母 
[:upper:]:任意大寫字母 
[:alpha:]:任意大小寫字母 
[:alnum:]:任意數字或字母 
[:space:]:空格 
[:punct:]:標點符號

  • 匹配次數: 
    用在要指定次數的字符后面,用于指定前面的字符要出現的次數

*:匹配前面字符任意次 
Linux文本搜索工具grep 
注:a*c篩選的是含有c的行,a*是指a可以出現任意次也可沒有。

.*:匹配任意長度的任意字符(.為任意字符 *為任意次數) 
Linux文本搜索工具grep

\?:匹配其前面的字符0或1次,即前面的可有可無 
Linux文本搜索工具grep

\+:匹配其前面的字符至少1次 
Linux文本搜索工具grep

\{m\}:匹配前面的字符m次 
Linux文本搜索工具grep

\{m,n\}:匹配前面的字符至少m次,至多n次 
Linux文本搜索工具grep 
\{0,n\}:匹配前面的字符至多n次 
\{m,\}:匹配前面的字符至少m次

  • 位置錨定:

^:行首錨定,用于模式的最左側 
Linux文本搜索工具grep

$:行尾錨定,用于模式的最右側 
Linux文本搜索工具grep

^PATTERN$:用模式匹配整行 
Linux文本搜索工具grep

^$:匹配空行,主要配合-v取反消除空行

^[[:space:]]*$:在^$匹配不到的時候使用

\<\b:詞首錨定,用于單詞模式的左側 
Linux文本搜索工具grep

\>\b:詞尾錨定,用于單詞模式的右側 
Linux文本搜索工具grep

\<PATTERN\>:匹配整個單詞 
Linux文本搜索工具grep

  • 分組:

\(\):將一個或多個字符捆綁在一起,當作一個整體進行處理 
Linux文本搜索工具grep

當我們想后續內容與前面模式匹配到的一樣,則需要使用到引用也稱后向引用。 
后向引用:引用前面的分組括號中的模式所匹配字符,而非模式本身 
Linux文本搜索工具grep

注:分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為: \1, \2, \3, … 
\1: 從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符 
例: (ab+(xy)*) 
  \1: ab+(xy)* 
  \2: xy


egrep

egrep=grep -E 
格式:egrep [OPTIONS] PATTERN [FILE…] 
常用選項與grep相同

擴展正則表達式

相對于基本正則表達式而言擴展正則表達式在某些參數上可以不使用轉義符(\),在使用方式上并沒有區別

接下來將介紹擴展正則表達式與基本正則表達式不同的地方,相同點不再累述

  • 次數匹配

?:匹配其前面的字符0或1次,即前面的可有可無 
+:匹配其前面的字符至少1次 
{m}:匹配前面的字符m次 
{m,n}:匹配前面的字符至少m次,至多n次

  • 分組

():將一個或多個字符捆綁在一起,當作一個整體進行處理

  • 或者

基本正則表達式可以使用\|代表或者 

a|b:a或者b 
C|cat:C或cat 
(C|c)at:Cat或cat


fgrep

fgrep不支持正則表達式,表達式僅作普通字符處理

fgrep=grep -F

原創文章,作者:Net18-海濱,如若轉載,請注明出處:http://www.www58058.com/13872

(0)
Net18-海濱Net18-海濱
上一篇 2016-04-05
下一篇 2016-04-05

相關推薦

  • 何為正則表達式?

    何為正則表達式?   UNIX/Linux上有許多文本處理工具,其中最主要最重要要屬grep、sed、和awk三種了,被稱為文本處理三劍客。但是要完全認識他們的各種功能,則必須現在正則表達式及其元字符的使用上打好基礎。 什么是正則表達式呢?正則表達式(regular expression,RE)是一種字符模式,用于在查找過程中匹配指定的字符。正則表…

    Linux干貨 2016-08-16
  • rhel6.7安裝pymssql(通過Python連接MSsql數據庫)

    依賴安裝: freetds、python-devel、cython、Python3.x 1、安裝freetds tar -jxvf freetds-dev.0.99.134.tar.bz cd freetds-dev.0.99.134 ./configure –prefix=/usr/local/freetds&nb…

    Linux干貨 2016-05-23
  • Shell腳本的編寫

    1.什么是Shell腳本 Shell腳本是利用 shell 的功能所寫的一個程序 program,這個程序是使用純文本文件,將一些 shell 的語法與指令(含外部指令)寫在里面, 搭配正則表達式、管線命令與數據流重導向等功能,以達到我們所想要的處理目的。 Shell 腳本可以簡單的被看成是批處理文件, 也可以被說成是一個程序語言,且這個程序語言由于都是利用…

    Linux干貨 2017-04-16
  • Linux軟件包管理工具yum詳解

    yum介紹 yum客戶端的使用 配置文件項作說明: 案例repo配置文件。 創建yum源命令(yum-config-manager) yum list相關命令 yum安裝 yum更新和升級 yum查找和顯示 yum刪除程序 查看倉庫 實戰演練本地yum倉庫(光盤) YUM內置變量 創建YUM倉庫(http) yum介紹 yum命令是在Fedora和RedHa…

    Linux干貨 2016-09-07
  • shell編程作業

    1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。 [root@localhost sh.log]# cat systeminfo.sh  #!/bin/bash #author:DYW #顯示當前主機系統…

    Linux干貨 2016-08-15
  • bash中的變量詳解

        在bash中,巧妙地運用變量,能夠大大減輕編程的工作量,下面讓我們來詳細了解一下bash的變量. bash中的變量種類:     根據變量的生效范圍等標準:         本地變量:生效范圍…

    Linux干貨 2016-08-18

評論列表(3條)

  • stanley
    stanley 2016-04-05 22:57

    贊。詳細有料

  • twoyang
    twoyang 2016-04-07 20:45

    基本正則表達式是支持\|的。

  • Net18-海濱
    Net18-海濱 2016-04-08 12:07

    修正:基本正則表達式可使用\|來代表或者,并非不支持,感謝twoyang提醒。

欧美性久久久久