1. 程式人生 > >正則表示式之掌握grep的用法

正則表示式之掌握grep的用法

    grep (縮寫來自Globally search a Regular Expression and Print)是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹配的行打印出來。Grep命令中允許指定的串語句是一個規則表示式,這是一種允許使用某些特殊鍵盤字元的指定字串的方法,這種方法中的特殊鍵盤字元可以用於代表其他字元也可以進一步定義模式匹配工作方式。---百度百科

    grep命令常見的格式為:grep [-cinvqABC] 'word' filename

    -c:表示列印符合要求的行數(並不是匹配的次數)。

    -i:表示忽略大小寫。

    -n:表示輸出符合要求的行及其行號

    -v:表示列印不符合要求的行(反向)

    -e:  指定多個匹配樣式

    -l :列出匹配文字位於哪一個檔案中。The  scanning  will  stop  on  the  first match。

    -An:列印符合要求的行以及後面n行

    -Bn:列印符合要求的行以及前面n行

    -Cn:列印符合要求的行以及前後各n行

    --color=auto 符合要求的行列出顏色

同時可以在 ~/.bashrc 內加上這行:alias grep='grep --color=auto'再以 source ~/.bashrc來立即生效即可。 這樣每次執行 grep 都會自動加上顏色顯示。#echo 'alias grep='grep --color=auto' >> ~/.bashrc. 每當一個新的shell程序生成時,進了會執行~/.bashrc 中的命令

1.匹配帶有某個關鍵字(或不帶有)的行並輸出行號。

[[email protected] ~]# grep -n 'root' /etc/passwd          或是 #cat /etc/passwd | grep -n 'root'
1:root:x:0:0:root:/root:/bin/bash
11:operator:x:11:0:operator:/root:/sbin/nologin

[[email protected] ~]# grep -nv 'root' /etc/passwd

統計檔案中匹配項的數量

#grep -c 'text' filename | wc -l

2.遞迴搜尋檔案

#grep 'text'.  -R  -n           “ .代表當前目錄 ,這介開發人員使用的最多的命令之一,它用於查詢某些文字位於哪些原始碼檔案中。

3.單個grep命令可以對多個檔案進行搜尋

#grep 'match_text' file1 ,file2,file3....

#grep-l  'match_text' file1 ,file2,file3....  可以搜尋出多個檔案並匹配文字位於哪一個檔案中。

4.用grep匹配多個樣式

#grep -e 'pattern1'  -e 'pattern'

注:與 l 相反的是L,它會返回一個不匹配的檔案列表。

5.利用[] 匹配和查詢一個指定範圍內的字元

[[email protected] ~]# grep '[0-9]'/etc/inittab      #.過濾所有包含數字的行,,若要求字串是數字和英文可寫成[0-9a-zaA-Z]

[[email protected] ~]# grep -v '[0-9]' /etc/inittab  #.過濾所有不包含數字的行

[[email protected] ~]# grep -n 't[ae]st' filename  #列出含有”tast"和"test"的字串的行

6.刪除所有以'word'開頭(或結尾)的行和所有空行

[[email protected] ~]# grep -v '^#' /etc/crontab | grep -v '^$'

[[email protected] ~]# grep -n '\.$' filename    #找出行尾以小數點(.)結束的那一行,因為小數點還有其他意義,所以要使用轉義字元\來加以解除其特殊意義。

注:在正則表示式中,'^'代表行的開始,'$'代表行的結尾, '^$'就代表空白行。

7.反向選擇[^list/字元],找出不要的字串或範圍

[[email protected] ~]#grep -n '[^a-zA-Z]' filename     #列出非全部字母行

123

abc456

#edf

[[email protected] ~]#grep -n '^[a-zA-Z]' filename     #列出以字母開始的行

[[email protected] ~]#grep -n '^[^a-zA-Z]' filename  #列出不是以字母開始的行

注:注意^[]和[^]的區別

8.過濾出任意一個字元.和重複字元*

"."代表一定有一個任意字元

[[email protected] ~]#grep -n 'r..o' /etc/passwd


"r..o"表示把r和n之前的有兩個任意字元的行過濾出來。

在正則表示式中*並不像萬用字元那樣代表任意(0或多個)字元,代表重複匹配零個或多個先前字元(零個代表先前字元不存在)

[[email protected] ~]# grep 'ooo*' /etc/passwd


'ooo*'表示oo,ooo,oooo.....

'oo*代表為o,oo,ooo,oooo....

'o*'代表空字元或一個o以上的字元

[[email protected] ~]# grep 'r*t' /etc/passwd


'r*t' 並不表示以r開頭以t結尾的字串,因為r*代表空字元以及r,rr,rrr....再加上後面的t,'r*t'表示t,rt,rrt,rrrt...

而'.*"就代表零個或多個任意字元,可以表示表示以r開頭以t結尾的字串

[[email protected] ~]# grep 'r.*t' /etc/passwd


9.限定連續字元的範圍{}

[[email protected] ~]# grep 'o\{2\}' /etc/passwd





x\{m\}

重複字元x,m次,如:'o\{5\}'匹配包含5個o的行。

x\{m,\}

重複字元x,至少m次,如:'o\{5,\}'匹配至少有5個o的行。

x\{m,n\}

重複字元x,至少m次,不多於n次,如:'o\{5,10\}'匹配5--10個o的行。

思考一下以上四個圖為什麼o\{2\},o\{2,\},o\{2,3\}會出現roooooot,而‘ro\{2,3\}t' 不會出現。

10.在grep 搜尋中指定或排除檔案

#grep ''main()" . -r --include *.{c,cpp}              目錄中遞迴搜尋所有的.c和.cpp檔案 

#grep  "main()" . -r --exclude "README"           在搜尋中排除所有的README檔案

11.grep 的靜默輸出

有時並不打算檢視匹配的字串,而只是想知道是否能夠匹配成功,可通過-q靜默選項實現。

在靜默模式中,grep不會輸出 任何內容,它僅根據命令執行成功與否返回退出狀態,如果命令

執行成功則返回0.

編寫一個指令碼利用grep的靜默模式來測試文字匹配是否存在於某個檔案中。

#!/bin/bash
#filename:quiet_grep.sh
#function:測試檔案是否包含特定的文字內容
if [ $# -ne 2 ];then
   echo "Usage: $0 $1 $2"
   exit 1
fi

grep -q $1 $2
if [ $? -eq 0 ]; then
   echo "The text exist in the file"
else
   echo "The text dose not exist in the file"
fi
#chmod a+x quiet_grep.sh

# ./quiet_grep.sh root  /etc/passwd
The text exist in the file


http://wenku.baidu.com/view/0818eb1aff00bed5b9f31dc6.html?re=view

http://www.dabu.info/linux-install-ipython.html

http://blog.chinaunix.net/uid-26000296-id-3421802.html

http://blog.csdn.net/dysh1985/article/details/7571273

相關推薦

表示式掌握grep用法

    grep (縮寫來自Globally search a Regular Expression and Print)是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹配的行打印出來。Grep命令中允許指定的串語句是一個規則表示式,這是一種允許使用某些特殊鍵盤

linux 表示式grep

正則表示式就是處理字串的方法,可以執行查詢,刪除,替換等特定字元處理程式。 常用命令 grep ,awk ,sed [: alunm:] 代表英文大小寫字元及數字 即0-9 A-Z a-z [: alpha:] 代表任何英文大小寫字元 A-Z

表示式grep,egrep

正則表示式 正則表示式又稱規則表示式,正則就是一串有規律的字串,掌握好正則對於編寫shell指令碼有很大幫助,各種程式語言中都有正則,原理一樣。學好正則表示式,才算真正進入linux。正則三劍客:grep/egrep,sed,awkgrep 過濾指定關鍵詞,e

Python中表示式re.match的用法

re.match(pattern, string, flags) 第一個引數是正則表示式,如果匹配成功,則返回一個Match,否則返回一個None; 第二個引數表示要匹配的字串; 第三個引數是標緻位,用於控制正則表示式的匹配方式,如:是否區分大小寫,多行匹配等等。 需要特別注意的是,這個方法並不是完

表示式C程式中使用

POSIX規定了正則表示式的C語言庫函式,詳見regex(3)。我們已經學習了很多C語言庫函式的用法,讀者應該具備自己看懂man手冊的能力了。本章介紹了正則表示式在grep、sed、awk中的用法,學習要能夠舉一反三,請讀者根據regex(3)自己總結正則表示式在C語言中的用法,寫一些簡單的程式,例

Python學習筆記模式匹配與表示式使用和不使用表示式

 隨筆記錄方便自己和同路人查閱。 #------------------------------------------------我是可恥的分割線-------------------------------------------   假設你希望在字串中查詢電話號碼。你知道模式:3個數字,一

Nginx表示式匹配操作符詳解

Nginx正則表示式之匹配操作符詳解 nginx可以在配置檔案中對某些內建變數進行判斷,從而實現某些功能。例如:防止rewrite、盜鏈、對靜態資源設定快取以及瀏覽器限制等等。由於nginx配置中有if指令,但是沒有對應else指令,所以判斷要分為匹配和不匹配。

JS表示式--?:

使用形如(?:pattern)的正則就可以避免儲存括號內的匹配結果。 ?:匹配冒號後的內容但是不獲取匹配結果;不進行儲存供以後使用  下面這個正則是為了實現只匹配以b或者c開頭的字串,一直匹配到換行字元,但是。可以使用“\1”來反向引用這個括號裡的子 正則表示式所匹配的內容。而且exec方法也會

js表示式match函式

功能:使用正則表示式模式對字串執行查詢,並將包含查詢的結果作為陣列返回  函式格式:stringObj.match(rgExp) stringObj為字串必選 rgExp為正則表示式必選項  返回值:如果能匹配則返回結果陣列,如果不能匹配返回null  使用方法:&nb

表示式快速入門篇

前言 此篇隨筆,參考了鼎鼎大名的《正則表示式30分鐘入門》,原帖地址:http://deerchao.net/tutorials/regex/regex.htm 建議初學者可以玩玩正則表示式圖解網站和表示式測試網站,可以更加直觀的瞭解自己書寫的正則表示式結構和作用。他們分別是 圖解網站 

手把手教你搞懂JavaScript表示式方法

咱們來看看JavaScript中都有哪些操作正則的方法。 RegExp RegExp 是正則表示式的建構函式。 使用建構函式建立正則表示式有多種寫法: new RegExp('abc'); // /abc/ new RegExp('abc', 'gi'); // /abc/gi

表示式零寬斷言

正則表示式之零寬斷言 用於查詢在某些內容(但並不包括這些內容)之前或之後的東西 零寬度正預測先行斷言 - (?=exp) 匹配exp前面的位置 正則表示式:.+(?=://) 原始字串:http://localhost:8080/awesome-g

JavaScript表示式語法--詼諧易懂

正則表示式可以用來做表單校驗,也可以用來搜尋關鍵字,匹配字元等等,功能非常強大,但是剛開始看到正則的語法就頭大,什麼程式碼,明明亂碼好嘛?! 但是這麼好用的東西怎麼能不學習,偶然看到師父轉發的文章,簡直讓我這初學者醍醐灌頂,作者講的很通俗易懂。 在文章開始前,要了解es6字串操作方法

表示式:.*?

s = ‘abababababab’ pattern = re.compile(r'a.*b') 那麼檢索到的字串為‘abababababab’,該方法為貪婪匹配,找最長的 pattern = re.compile(r'a.*?b') 加了問號之後預設找最短的 輸出就是6個'ab

linux 表示式 sed 與awk

sed 可以將資料進行替換,刪除,新增,選取等操作 sed [引數] [動作] 引數: -n :使用安靜模式 ,只有經過sed特殊處理的那一行才能被列出來 -i : 直接修改讀取檔案內容,而不是由螢幕輸出 -e

js表示式來一打例項

前面我們介紹了js的正則表示式,這篇文章我們來實戰一下,用js的正則表示式來寫一些開發上的例項 把數字字元按千位進行逗號分隔: 例如: var numStr = '100000000' var pattern = /(?=(\d{3})+$)/g console.log(numS

表示式貪婪匹配與非貪婪匹配

. :匹配除 "\n" 之外的任何單個字元。要匹配包括 '\n' 在內的任何字元,請使用像 '[.\n]' 的模式 * :匹配0個或多個 使用 .* 的話就可以匹配任意長度的任意字元,但是有時候在使用 .*時就可能匹配不到物品們想要的結果,例: import re

c++ 表示式差點過不去的坎

  bool Config::DecodeLine(const string & data) { string strT = "(string)"; string intT = "(int)"; string floatT = "(float)"; string hex

js表示式人民幣匹配

   人民幣格式匹配   小寫格式:¥ 符號 和 整數值 與小數3部分組成。   (0)程式碼與執行結果   { // 匹配人民幣 let [reg, info, rmb, result] = [ /^(¥)

C#表示式Ismatch()

1.IsMatch()方法           IsMatch()方法可以測試字串,看它是否匹配正則表示式的模式。如果發現一次匹配,該方法返回"true",否則返回"false"。IsMatch()擁