天天看點

【一天一個shell指令】文本内容操作系列-grep

從這篇開始,是文本内容操作,差別于文本操作。

shell,perl,python,一直都是文本操作的專家語言,而我們今後學習的的将是shell的噱頭--文本操作。下面提到最常見的一個:

grep

這算是文本内容的一個重量級選手,能根據某些規格在上千行的文本檔案中查找所需要的資料。他能接受正規表達式和通配符。

基礎執行個體:

1. 指令翻譯包含給定match_pattern的文本行,如我在grep.txt中查找PATTERN

grep PATTERN grep.txt

or grep "PATTERN" grep.txt

2. 比對多個檔案

grep PATTERN grep.txt grep1.txt

3. 從stdin中讀取

echo –e "this is a word\nnext line" | grep word

列印:this is a word

4. grep 與 正規表達式

grep –E "[a-z]+"

或者

egrep "[a-z]+"

5. 隻輸出比對部分,而不是比對的目前行

echo this is line. | greip –o –E "[a-z]+\."

輸出:line

6. 列印除包含match_pattern的行之外的所有行,可使用

grep -v match_pattern file

7. 統計文本或者檔案中包含比對字元串的字數(這個面試經常會問到)

$grep -c "text" filename

但他給出的是比對行的次數,而不是比對的次數

統計比對數量的話,可以用到下面的技巧

$echo –e "1 2 3 4\nhello\n5 6"| egrep -o "[0-9]" | wc –l

列印1到6 | 從stdin中讀取數字,分行列印 | 統計行數

8. 列印行号

grep "text" -n filename

9. 搜2個檔案,以及他們的行号,輸出會列印檔案名

grep "text"–n s1.txt s2.txt

10.如果你隻想知道哪些檔案有 單詞PATTERN

grep –l PATTER s1.txt s2.txt

-L則傳回的不比對檔案清單

11.可以再整個目錄下查找 單詞PATTERN 在那些檔案裡

grep PATTERN . -R -n

12 同時多個比對查找

echo this is a line of text | grep -e "this" -e "line" -o

列印:

this

line

13 隻在某些合适的檔案中搜尋

grep "main()" .-r --include *.{c,cpp}

隻在.c 和.cpp結尾的檔案中搜尋 main()

14 進行搜尋排除某些檔案

grep "main()" . -r --exclude "README"

排除了所有檔案名為"README"的檔案

15 列印比對之前或之後的3行

seq 10 | grep 5 –A 3 之前

seq 10 | grep 6 –B 3 之後

16 列印比對前後3行,同時輸出

seq 10 | grep 5 –C 3

我們來看下--help

用法: grep [選項]... PATTERN [FILE]... 

在每個 FILE 或是标準輸入中查找 PATTERN。 

預設的 PATTERN 是一個基本正規表達式(縮寫為 BRE)。 

例如: grep -i 'hello world' menu.h main.c

正規表達式選擇與解釋: 

  -E, --extended-regexp     PATTERN 是一個可擴充的正規表達式(縮寫為 ERE) 

  -F, --fixed-strings       PATTERN 是一組由斷行符分隔的定長字元串。 

  -G, --basic-regexp        PATTERN 是一個基本正規表達式(縮寫為 BRE) 

  -P, --perl-regexp         PATTERN 是一個 Perl 正規表達式 

  -e, --regexp=PATTERN      用 PATTERN 來進行比對操作 

  -f, --file=FILE           從 FILE 中取得 PATTERN 

  -i, --ignore-case         忽略大小寫 

  -w, --word-regexp         強制 PATTERN 僅完全比對字詞 

  -x, --line-regexp         強制 PATTERN 僅完全比對一行 

  -z, --null-data           一個 0 位元組的資料行,但不是空行

内容比較多,是以不全貼出來,全部内容在附件中。

大多數功能已經在執行個體中貼出,我的這個博文中,主要參考書籍《linux shell腳本攻略》

如果你覺得更是個學習時間比較充裕,不妨直接購買此書。

<a href="http://down.51cto.com/data/2361221" target="_blank">附件:http://down.51cto.com/data/2361221</a>

本文轉自 wws5201985 51CTO部落格,原文連結:http://blog.51cto.com/yjplxq/959483,如需轉載請自行聯系原作者