1. 程式人生 > >Linux grep基本用法與正則表示式

Linux grep基本用法與正則表示式

本文只是對於常用的grep配合正則表示式基本用法進行簡單小結,如果想仔細的學習正則表示式,請訪問鳥哥Linux私房菜,臺灣同胞的網站是繁體中文的,需要點兒耐心。

1、grep命令

功能:輸入檔案的每一行中查詢字串。

基本用法:

grep [-acinv] [--color=auto] [-A n] [-B n] '搜尋字串' 檔名
引數說明:
-a:將二進位制文件以文字方式處理
-c:顯示匹配次數
-i:忽略大小寫差異
-n:在行首顯示行號
-AAfter的意思,顯示匹配字串後n行的資料
-B:before的意思,顯示匹配字串前n行的資料
-v:顯示沒有匹配行-AAfter
的意思,顯示匹配部分之後n行-B:before的意思,顯示匹配部分之前n行
--color:以特定顏色高亮顯示匹配關鍵字
 –color選項是個非常好的選項,可以讓你清楚的明白匹配了那些字元。最好在自己的.bashrc或者.bash_profile檔案中加入:
alias grep=grep --color=auto

每次grep搜尋之後,自動高亮匹配效果了。‘搜尋字串’是正則表示式,注意為了避免shell的元字元對正則表示式的影響,請用單引號(’’)括起來,千萬不要用雙引號括起來(””)或者不括起來。

2、grep 與正則表示式

正則表示式分為基本正則表示式和擴充套件正則表示式。下面分別簡單總結一下。

元資料 意義和範例
^word 搜尋以word開頭的行。 例如:搜尋以#開頭的指令碼註釋行 grep –n ‘^#’ regular.txt
word$ 搜尋以word結束的行
. 匹配任意一個字元。 例如:grep –n ‘e.e’ regular.txt 匹配e和e之間有任意一個字元,可以匹配eee,eae,eve,但是不匹配ee。
\ 轉義字元。 例如:搜尋’,’是一個特殊字元,在正則表示式中有特殊含義。必須要先轉義。grep –n ‘\,” regular.txt
* 前面的字元重複0到多次。 例如匹配gle,gogle,google,gooogle等等 grep –n ‘go*gle’ regular.txt
[list] 匹配一系列字元中的一個。 例如:匹配gl,gf。grep –n ‘g[lf]’ regular.txt
[n1-n2] 匹配一個字元範圍中的一個字元。 例如:匹配數字字元 grep –n ‘[0-9]’ regular.txt
[^list] 匹配字符集以外的字元 例如:grep –n ‘[^o]‘ regular.txt 匹配非o字元
\<word 單詞是的開頭。 例如:匹配以g開頭的單詞 grep –n ‘\<g’ regular.txt
word\> 前面的字元重複n1,n2次 例如:匹配google,gooogle。grep –n ‘go\{2,3\}gle’ regular.txt
\<word 匹配單詞結尾 例如:匹配以tion結尾的單詞 grep –n ‘tion\>’ regular.txt
word\{n1\} 前面的字元重複n1 例如:匹配google。 grep –n ‘go\{2\}gle’ regular.txt
word\{n1,\} 前面的字元至少重複n1 例如:匹配google,gooogle。 grep –n ‘go\{2\}gle’ regular.txt
word\{n1,n2\} 前面的字元重複n1,n2次 例如:匹配google,gooogle。 grep –n ‘go\{2,3\}gle’ regular.txt

擴充套件正則表示式

?     #匹配0個或1個在其之前的那個普通字元。
      例如,匹配gd,god   grep –nE ‘go?d’ regular.txt

+    #匹配1個或多個在其之前的那個普通字元,重複前面字元1到多次。 
     例如:匹配god,good,goood等等字串。
     grep –nE go+d’ regular.txt

()   #表示一個字元集合或用在expr中,匹配整個括號內的字串,
     原來都是匹配單個字元。 例如:搜尋good或者glad
     grep –nE ‘g(oo|la)’ regular.txt

|    #表示“或”,匹配一組可選的字元,或(or)的方式匹配多個字串。
     例如:grep –nE ‘god|good’ regular.txt 匹配god或者good。

常用的集合表示方法有:

純數字:[[:digit:]]或[0-9]

小寫字母:[[:lower:]]或[a-z]

大寫字母:[[:upper:]]或[A-Z]

大小寫字母:[[:alpha:]]或[a-zA-Z]

數字加字母:[[:alnum:]]或[0-9a-zA-Z]

空白字元:[[:space:]]

標點符號:[[:punct:]]

3、關於匹配的例項

grep -c "48" test.txt #統計所有以“48”字元的行有多少
grep -i "May" test.txt #不區分大小寫查詢“May”所有的行)
grep -n "48" test.txt #顯示行號;顯示匹配字元“48”的行及行號,相同於 nl test.txt |grep 48)
grep -v "48" test.txt #顯示輸出沒有字元“48”所有的行)
grep "471" test.txt #顯示輸出字元“471”所在的行)
grep "48;" test.txt #顯示輸出以字元“48”開頭,並在字元“48”後是一個tab鍵所在的行
grep "48[34]" test.txt #顯示輸出以字元“48”開頭,第三個字元是“3”或是“4”的所有的行)
grep "^[^48]" test.txt #顯示輸出行首不是字元“48”的行)
grep "[Mm]ay" test.txt #設定大小寫查詢:顯示輸出第一個字元以“M”或“m”開頭,以字元“ay”結束的行)
grep "K…D" test.txt #顯示輸出第一個字元是“K”,第二、三、四是任意字元,第五個字元是“D”所在的行)
grep "[A-Z][9]D" test.txt #顯示輸出第一個字元的範圍是“A-D”,第二個字元是“9”,第三個字元的是“D”的所有的行
grep "[35]..1998" test.txt #顯示第一個字元是3或5,第二三個字元是任意,以1998結尾的所有行
grep "4/{2,/}" test.txt #模式出現機率查詢:顯示輸出字元“4”至少重複出現兩次的所有行
grep "9/{3,/}" test.txt #模式出現機率查詢:顯示輸出字元“9”至少重複出現三次的所有行
grep "9/{2,3/}" test.txt #模式出現機率查詢:顯示輸出字元“9”重複出現的次數在一定範圍內,重複出現2次或3次所有行
grep -n "^$" test.txt #顯示輸出空行的行號
ls -l |grep "^d" #如果要查詢目錄列表中的目錄 同:ls -d *
ls -l |grep "^d[d]" #在一個目錄中查詢不包含目錄的所有檔案
ls -l |grpe "^d…..x..x" #查詢其他使用者和使用者組成員有可執行許可權的目錄集合

4、grep練習題

(1).顯示/proc/meminfo檔案中以大寫或小寫s開頭的行;

# grep -i '^[Ss]' /proc/meminfo

(2).顯示/etc/passwd檔案中其預設shell為非/sbin/nologin的使用者;

# grep -v '/sbin/nologin$' /etc/passwd | cut -d: -f1

(3).顯示/etc/passwd檔案中其預設shell為/bin/bash的使用者

進一步:僅顯示上述結果中其ID號最大的使用者

# grep '/bin/bash$' /etc/passwd | cut -d: -f1 | sort -n -r | head -1

(4).找出/etc/passwd檔案中的一位數或兩位數;

# grep '\<[[:digit:]]\{1,2\}\>' /etc/passwd

(5).顯示/boot/grub/grub.conf中至少一個空白字元開頭的行

# grep '^[[:space:]]\+.*' /boot/grub/grub.conf

(6).顯示/etc/rc.d/rc.sysinit檔案中,以#開頭,後面跟至少一個空白字元,而後又有至少一個非空白字元的行;

# grep '^#[[:space:]]\+[^[:space:]]\+' /etc/rc.d/rc.sysinit

(7).找出netstat -tan命令執行結果中包含’LISTEN’的行;

# netstat -tan | grep 'LISTEN[[:space:]]*$

(8).新增使用者bash,testbash,basher,nologin(SHELL為/sbin/nologin),而找出當前系統上其使用者名稱和預設SHELL相同的使用者;

# grep '\(\<[[:alnum:]]\+\>\).*\1$' /etc/passwd

(9).擴充套件題:新建一個文字檔案,假設有如下內容:

He like his lover.

He love his lover.

He like his liker.

He love his liker.

找出其中最後一個單詞是由此前某單詞加r構成的行;

# grep '\(\<[[:alpha:]]\+\>\).*\1r' grep.txt

(10).顯示當前系統上root、centos或user1使用者的預設shell及使用者名稱;

# grep -E '^(root|centos|user1\>)' /etc/passwd

(11).找出/etc/rc.d/init.d/functions檔案中某單詞後面跟一對小括號’()”的行;

# grep -o '\<[[:alpha:]]\+\>()' /etc/rc.d/init.d/functions

(12).使用echo輸出一個路徑,而使用egrep取出其基名;

# echo /etc/rc.d/ | grep -o '[^/]\+/\?$' | grep -o '[^/]\+'

相關推薦

Linux grep基本用法表示式

本文只是對於常用的grep配合正則表示式基本用法進行簡單小結,如果想仔細的學習正則表示式,請訪問鳥哥Linux私房菜,臺灣同胞的網站是繁體中文的,需要點兒耐心。 1、grep命令 功能:輸入檔案的每一行中查詢字串。 基本用法: grep [-ac

Linux 萬用字元 表示式 的區別詳解

背景:在linux使用過程中,經常需要查詢檔案,對命令中的萬用字元 pattern 和正則表示式的區分不是很清楚。有必要好好研究一下。 1 掃盲 1.1 萬用字元和正則表示式 當在使用命令列時,有很多時間都用來查詢你所需要的檔案,如 ls find 等。 Sh

強大的grep用法詳解:grep表示式

首先要記住的是: 正則表示式與萬用字元不一樣,它們表示的含義並不相同!正則表示式只是一種表示法,只要工具支援這種表示法, 那麼該工具就可以處理正則表示式的字串。vim、grep、awk 、sed 都支援正則表示式,也正是因為由於它們支援正則,才顯得它們強大;在以前上班的公司裡,由於公司是基於web的服務型網站

文字搜尋必學命令-grep egrep fgrep用法以及表示式

一、grep、egrep、fgrep命令   本文中主要介紹了linux系統下grep egrep fgrep命令和正則表示式的基本引數和使用格式、方法。(註釋:文中fg代表例子,) 1.1、基本定義:         grep(global search regu

Grep(egrep)表示式

如下,g??d 可以用 'g..d' 表示。 good ,gxxd ,gabd .....都符合。 [email protected]:~/tmp$ grep -n 'g..d' regular_express.txt 1:"Open Source" is a good mechanism to d

1.2 Linux基本命令和表示式 3.13

  一、基本命令      1、find:(1)  -name 根據名字查詢     -inname 不區分大小寫查詢                     (2) -sixe 根據大小查詢檔案    +n 大於;-n 小於;n 等於(n為檔案大小)            

Linux筆記(49)——表示式字元命令

正則表示式 正則表示式用於字串的模式分割,匹配,查詢以及替換操作 比如有一篇很長很長的文章,我們如何找到自己想要的資訊?可以使用正則的匹配功能 正則表示式與萬用字元 萬用字元有: 1. * :匹配任意字元 2. ?:匹配任意一個字元 3. []

JavaScript日期格式化表示式RegExp.$的用法

今天有空就開寫一個Calendar日曆,在網上看到一個牛人寫的JavaScript日期格式化的程式碼,看了一會有點暈。程式碼奉上: /** * @param d the delimiter * @param p the pattern of your date

Linux/Unix工具表示式的POSIX規範

對正則表示式有基本瞭解的讀者,一定不會陌生『\d』、『[a-z]+』之類的表示式,前者匹配一個數字字元,後者匹配一個以上的小寫英文字母。但是如果你用過vi、grep、awk、sed之類Linux/Unix下的工具或許會發現,這些工具雖然支援正則表示式,語法卻很不一樣,照通

Linux Shell的萬用字元表示式

Overview wildcard是由shell處理的, 它只會出現在 command的argument 裡——既不用在 command_name裡, 也不用在 options 上。當在argument中碰到Wildcard時,shell會將其當作路徑或檔名去在磁碟上搜尋可能

Day15 - linux的特殊符號表達式

find 括號 window type yellow 啟動 字符 clip 標準輸出 第1章 linux的特殊符號 1.1 通配符 * {} 1.1.1 含義 方便查找文件 通配符是用來找文件名字的。 1.1.2 * 通過find 命令找以 .sh 結尾的文件

【前端】JavaScript表示式

一、正則表示式(regular expression簡稱res) 1、定義 一個正則表示式就是由普通字元以及特殊字元(稱為元字元)組成的文字模式。該模式描述在查詢文字主體時待匹配的一個或多個字串。正則表示式作為一個模板,將某個字元模式與所搜尋的字串進行匹配。 2、作用 正則表示式

jmeter設定全域性變數表示式提取器

介面測試中,很多介面都要帶上登入後的token才能正常傳送請求,這裡記錄一下登入獲取token設定為全域性變數供其他介面使用 登入後返回資訊資訊中會有一個token值,新增後置處理器中的正則表示式提取token,然後用後置處理器中的BeanShell PostProcessor設定token為全域性變數

[一天幾個linux命令] shell指令碼之表示式

shell指令碼之正則表示式 原文連結:Linux–shell指令碼之正則表示式 概念及特點 概念 正則表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定的字元、及這些特定字元的組合,組成一個"規則字串",這個"規則字串"用來表達對字串的一種過濾邏輯。規定一些特殊語

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

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

Day004_Linux基礎命令之特殊符號表示式萬用字元

特殊符號: . 點 cd . 表示當前目錄 ' '' 單引號,所見即所得 原封不動輸出 " ""雙引號,裡面的特殊符號會被解析執行   `` ====$( ) 先執行() 裡的命令,把結果留下 > 重定向符號  先清空檔案內容, 再追加檔案最後一行 &

Javascript 表示式

Javascript 與正則表示式 一、正則表示式(regular expression簡稱res)   1、定義: 一個正則表示式就是由普通字元以及特殊字元(稱為元字元)組成的文字模式。該模式描述在查詢文字主體時待匹配的一個或多個字串。正則表示式作為一個模板,將某個字

Groovy入門-字串處理表示式

字串處理-1 println ‘lxt008 said "Groovy"' println "lxt008 said 'Grails'" def str1 = 'Groovy&Grails&lxt008' println str1[4]

Python爬蟲表示式

Python爬蟲與正則表示式 一.Python中萬用字元的使用 1.表示方式 表示 意義 * 匹配0到任意字元 ? 匹配單個字元

Scala的檔案讀寫操作表示式

在本篇部落格中你將會學習並瞭解常用的檔案處理任務,例如讀取檔案的一行文字,本部落格的要點包含: Source.fromFile(...).getLines.toArray 輸出檔案所有行 Source.fromFile(...).mkString 以字串形式輸出檔案內容 將字串轉換為數字,可以使用toI