標籤:Regex grep shell
grep命令文法
grep命令使用一個選項、一個要匹配的模式和要搜尋的檔案,它的文法如下所示:
grep [options] PATTERN [FILES]
如果沒有提供檔案名稱,則grep命令將搜尋標準輸入。
- options
選項 |
含義 |
-c |
輸出匹配行的數目,而不是輸出匹配的行 |
-E |
啟用擴充運算式 |
-h |
取消每個輸出行的普通首碼,即匹配查詢模式的檔案名稱 |
-i |
忽略大小寫 |
-l |
只列出包含匹配行的檔案名稱,而不輸出真正的匹配行 |
-v |
對匹配模式取反,即搜尋不匹配行而不是匹配行 |
- PATTERN
匹配模式採用Regex。Regex是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則字串”,這個“規則字串”用來表達對字串的一種過濾邏輯。
給定一個Regex和另一個字串,我們可以達到如下的目的:
1. 給定的字串是否符合Regex的過濾邏輯(稱作“匹配”);
2. 可以通過Regex,從字串中擷取我們想要的特定部分。
Regex的特點是:
1. 靈活性、邏輯性和功能性非常的強;
2. 可以迅速地用極簡單的方式達到字串的複雜控制。
3. 對於剛接觸的人來說,比較晦澀難懂。
由於Regex主要應用對象是文本,因此它在各種文字編輯器場合都有應用。
在Regex的使用過程中,一些字元是以特定方式處理的。grep命令支援且最常用的特殊字元如下表所示:
字元 |
含義 |
^ |
指向一行的開頭 |
$ |
指向一行的結尾 |
. |
任意單個字元 |
[ ] |
方括弧內包含一個字元範圍,其中任何一個字元都可以被匹配,例如字元範圍a~e,或在字元範圍前面加上^符號表示使用反向字元範圍,即不匹配指定範圍的內的字元。 |
如果想將上述字元用作一般字元,就需要在它們前面加上\字元。例如,如果想使用$字元,需要將它寫為 \$ 。
在方括弧中還可以使用一些有用的特殊匹配模式。如下表所示:
匹配模式 |
含義 |
[:alnum:] |
字母與數字字元 |
[:alpha:] |
字母 |
[:ascii:] |
ASCII字元 |
[:blank:] |
空格或定位字元 |
[:cntrl:] |
ASCII控制字元 |
[:digit:] |
數字 |
[:graph:] |
非控制、非空格字元 |
[:lower:] |
小寫字母 |
[:print:] |
可列印字元 |
[:punct:] |
標點符號字元 |
[:space:] |
空白字元,包括垂直製表字元 |
[:upper:] |
大寫字母 |
[:xdigit:] |
十六進位數字 |
另外,如果指定了用於擴充匹配的-E選項,那些用於控制匹配完成的其他字元可能會遵循Regex的規則,如下表所示:
選項 |
含義 |
? |
匹配是可選的,但最多匹配一次 |
* |
必須匹配0次或多次 |
+ |
必須匹配1次或多次 |
{n} |
必須匹配n次 |
{n, } |
必須匹配n次或者n次以上 |
{n,m} |
匹配次數在n到m之間,包括n和m |
對於shell中的grep命令來說,需要在這些字元之前加上 \ 字元。
grep命令樣本
- 第一個例子是尋找以字母e結尾的行。
<span style="font-size:12px;">grep e$ words.txt</span>
- 尋找以字母a結尾的單詞。
<span style="font-size:12px;">grep a[[:blank:]] words2.txt</span>
- 尋找以Th開頭的由3個字母組成的單詞。
<span style="font-size:12px;">grep Th.[[:space:]] words2.txt</span>
shell指令碼編程中的grep命令