shell指令碼系列 grep用法總結

2021-05-25 05:36:05 字數 3946 閱讀 2855

相信

grep

是unix

和linux

中使用最廣泛的命令之一。

grep

(全域性正規表示式版本)允許

對文字檔案進行模式查詢。如果找到匹配模式,

grep

列印包含模式的所有行。

grep

支援基本正

則表示式,也支援其擴充套件集。

本文主要討論以下內容:

• grep(引數)選項。

• 匹配grep的一般模式。

• 只匹配字母或數字,或兩者混用。

• 匹配字串範圍。

1. grep

grep 一般格式為:

grep [選項]基本正規表示式[檔案]

2.雙引號的使用

在grep命令中輸入字串引數時,最好將其用雙引號括起來。例如:「mystring」。這樣做有兩個原因,一是以防被誤解為shell命令,二是可以用來查詢多個單詞組成的字串,例如:「jetplane」,如果不用雙引號將其括起來,那麼單詞plane將被誤認為是乙個檔案,查詢結果

將返回「檔案不存在」的錯誤資訊。在呼叫變數時,也應該使用雙引號,諸如:grep「$myvar」檔名,如果不這樣,將沒有返回結果。

在呼叫模式匹配時,應使用單引號。

3.grep選項

常用的grep選項有:

-c          只輸出匹配行的計數。

-i          不區分大小寫(只適用於單字元)。

-h          查詢多檔案時不顯示檔名。

-l          查詢多檔案時只輸出包含匹配字元的檔名。

-n          顯示匹配行及行號。

-s          不顯示不存在或無匹配文字的錯誤資訊。

-v          顯示不包含匹配文字的所有行。

4. grep舉例

4.1 多檔案查詢

$ grep "sort"*.doc

或在所有檔案中查詢單詞「 sort it」

$ grep "sort it" *

$ grep -c "48"data.f

$ 4grep返回數字4,意義是有4行包含字串「48」

顯示滿足匹配模式的所有行行數

[root@localhost /]# grep -n "48" data.f

1:48    dec     3bc1997         lpsx    68.00   lvx2a   138

2:483     sept    5ap1996         usp     65.00   lvx2c   189

5:484     nov     7pl1996         cad     49.00   plv2c   234

6:483     may     5pa1998         usp     37.00   kvm9d   644

顯示不匹配的行

[root@localhost /]# grep -v "48" data.f

47      oct     3zl1998         lpsx    43.00   kvm9d   512

219     dec     2cc1999         cad     23.00   plv2c   68

216     sept    3zl1998         usp     86.00   kvm9e   234

大小寫敏感

[root@localhost /]# grep -i "sept" data.f

483     sept    5ap1996         usp     65.00   lvx2c   189

216     sept    3zl1998         usp     86.00   kvm9e   234

5.正規表示式

5.1 模式匹配

假定要抽取**為484和483的城市位置,上一章中講到可以使用[ ]來指定字串範圍,這裡用48開始,以3或4結尾,這樣抽出484或483。

[root@localhost /]# grep "48[34]" data.f

483     sept    5ap1996         usp     65.00   lvx2c   189

484     nov     7pl1996         cad     49.00   plv2c   234

483     may     5pa1998         usp     37.00   kvm9d   644

不匹配行首 如果要抽出記錄,使其行首不是48,可以在方括號中使用^記號,表明查詢在行首開始。

[root@localhost /]# grep '^[^48]' data.f

219     dec     2cc1999         cad     23.00   plv2c   68

216     sept    3zl1998         usp     86.00   kvm9e   234

匹配任意字元

如果抽取以k開頭,以d結尾的所有**,可使用下述方法,因為已知**長度為5個字元:

[root@localhost /]# grep 'k...d' data.f

47      oct     3zl1998         lpsx    43.00   kvm9d   512

483     may     5pa1998         usp     37.00   kvm9d   644

日期查詢

乙個常用的查詢模式是日期查詢。先查詢所有以5開始以1996或1998結尾的所有記錄。使用模式5..199[6,8]。這意味著第乙個字元為5,後跟兩個點,接著是199,剩餘兩個數字是6或8。

[root@localhost /]# grep '5..199[68]' data.f

483     sept    5ap1996         usp     65.00   lvx2c   189

483     may     5pa1998         usp     37.00   kvm9d   644

模式出現機率

抽取包含數字4至少重複出現兩次的所有行,方法如下:

[root@localhost /]# grep '4/' data.f

483     may     5pa1998         usp     37.00   kvm9d   644

使用grep匹配「與」或者「或」模式

[root@localhost /]# grep -e '216|219' data.f

219     dec     2cc1999         cad     23.00   plv2c   68

216     sept    3zl1998         usp     86.00   kvm9e   234

使用grep匹配「與」或者「或」模式

[root@localhost /]# grep -e '216|219' data.f

219     dec     2cc1999         cad     23.00   plv2c   68

216     sept    3zl1998         usp     86.00   kvm9e   234

6 類名

類等價的正規表示式類等價的正規表示式

[[:upper:]]  [a-z]

[[:lower:]]   [a-z]

[[:alnum:]]  [0-9a-za-z]

[[:space:]]  空格或tab鍵

[[:digit:]]  [0-9]

[[:alpha:]]  [a-za-z]

7 總結

希望大家已經理解了grep的靈活性,它是乙個很強大而流行的工具,像其他許多unix工具一樣,已經被使用在dos中。如果要通過檔案快速查詢字串或模式, grep是乙個很好的選擇。簡單地說, grep是shell程式設計中很重要的工具。

shell 指令碼 系統檢測

bin bash 介面輸出區 optimize 函式命令區 order ip get sed s space g grep v lo echo read ep 請選擇您想要獲取ip的網絡卡名稱 wangka zw ifconfig grep n1 wangka grep inet awk ip if...

Linux Shell指令碼系列之一

shell的分類 使用tab鍵 進行命令和檔案目錄的補全,若當前匹配的有多個則再摁多一次,則會列出所有匹配的檔案或目錄 輸入重定向 wc 選項 檔名 選項 c 統計位元組數 w 統計單詞數 l 統計行數 管道符命令1 命令2 命令1的正確輸出作為命令2的操作物件 舉個栗子3 萬用字元?匹配乙個任意字...

shell指令碼學習(二) grep

1.grep egrep c 列印符合要求的行數 n 在輸出符合要求的行的同時連同行號一起輸出 v 列印不符合要求的行 r 會把目錄下面所有的檔案全部遍歷一遍 i 忽略大小寫 2.例子介紹 grep n root 1.txt grep n v root 1.txt 過濾出所有包含數字行 grep n...