指令名稱:grep
指令作用:
文本查找或搜尋工具
詳細說明:
同樣可以配合正規表達式來搜尋文本,并将比對的行列印輸出
也可用于過濾與搜尋特定字元串,使用十分靈活
常用參數:
-a #不要忽略二進制資料
-A #除了顯示符合範本樣式的那一行之外,并顯示該行之後的内容
-b #在顯示符合範本樣式的那一行之外,并顯示該行之前的内容
-B #除了顯示符合樣式的那一行之外,并顯示該行之前的内容
-c #計算符合範本樣式的列數
-C #除了顯示符合範本樣式的那一列之外,并顯示該列之前後的内容
-d #當指定要查找的是目錄而非檔案時,必須使用這項參數,否則grep指令将回報資訊并停止動作
-e #指定字元串作為查找檔案内容的範本樣式
-E #将範本樣式為延伸的普通表示法來使用,意味着使用能使用擴充正規表達式
-f #指定範本檔案,其内容有一個或多個範本樣式,讓grep查找符合範本條件的檔案内容,格式為每一列的範本樣式
-F #将範本樣式視為固定字元串的清單
-G #将範本樣式視為普通的表示法來使用
-h #在顯示符合範本樣式的那一列之前,不标示該列所屬的檔案名稱
-H #在顯示符合範本樣式的那一列之前,标示該列的檔案名稱
-i #忽略字元大小寫的差别
-l #列出檔案内容符合指定的範本樣式的檔案名稱
-L #列出檔案内容不符合指定的範本樣式的檔案名稱
-n #在顯示符合範本樣式的那一列之前,标示出該列的編号
-q #不顯示任何資訊
-R/-r #此參數的效果和指定“-d recurse”參數相同
-s #不顯示錯誤資訊
-v #反轉查找
-V #顯示版本資訊
-w #隻顯示全字元合的列
-x #隻顯示全列符合的列
-y #此參數效果跟“-i”相同
-o #隻輸出檔案中比對到的部分
正規表達式
^ #比對以XX開頭的行
$ #比對以XX結尾的行
常用執行個體:
#在多個檔案中查找:
grep "file" file_1 file_2 file_3
#輸出除之外的所有行 -v 選項:
grep -v "file" file_name
#标記比對顔色 --color=auto 選項:
grep "file" file_name --color=auto
#使用正規表達式 -E 選項:
grep -E "[1-9]+"
或
egrep "[1-9]+"
#隻輸出檔案中比對到的部分 -o 選項:
echo this is a test line. | grep -o -E "[a-z]+\."
line.
echo this is a test line. | egrep -o "[a-z]+\."
#統計檔案或者文本中包含比對字元串的行數-c 選項:
grep -c "text" file_name
2
#輸出包含比對字元串的行數 -n 選項:
grep "text" -n file_name
cat file_name | grep "text" -n
#多個檔案
grep "text" -n file_1 file_2
#列印樣式比對所位于的字元或位元組偏移:
echo gun is not unix | grep -b -o "not"
7:not
#一行中字元串的字元串是從該行的第一個字元開始計算,起始值為0,**-b -o** 一般總是配合使用
#搜尋多個檔案并查找比對文本在哪些檔案中:
grep -l "text" file1 file2 file3...
#grep遞歸搜尋檔案
#在多級目錄中對文本進行遞歸搜尋:
grep "text" . -r -n
#忽略比對樣式中的字元大小寫:
echo "hello world" | grep -i "HELLO"
hello
#選項 -e 指定多個比對樣式:
echo this is a text line | grep -e "is" -e "line" -o
is
line
#也可以使用 **-f** 選項來比對多個樣式,在樣式檔案中逐行寫出需要比對的字元。
cat patfile
aaa
bbb
echo aaa bbb ccc ddd eee | grep -f patfile -o
在grep搜尋結果中包括或者排除指定檔案:
#隻在目錄中所有的.php和.html檔案中遞歸搜尋字元"main()"
grep "main()" . -r --include *.{php,html}
#在搜尋結果中排除所有README檔案
grep "main()" . -r --exclude "README"
#在搜尋結果中排除filelist檔案清單裡的檔案
grep "main()" . -r --exclude-from filelist
使用0值位元組字尾的grep與xargs:
# 測試檔案:
echo "aaa" > file1
echo "bbb" > file2
echo "aaa" > file3
grep "aaa" file* -lZ | xargs -0 rm
#執行後會删除file1和file3,grep輸出用-Z選項來指定以0值位元組作為終結符檔案名(\0),xargs -0 讀取輸入并用0值位元組終結符分隔檔案名,然後删除比對檔案,-Z通常和-l結合使用。
grep靜默輸出:
grep -q "test" filename
# 不會輸出任何資訊,如果指令運作成功傳回0,失敗則傳回非0值。一般用于條件測試。
列印出比對文本之前或者之後的行:
# 顯示比對某個結果之後的3行,使用 -A 選項:
seq 10 | grep "5" -A 3
5
6
7
8
# 顯示比對某個結果之前的3行,使用 -B 選項:
seq 10 | grep "5" -B 3
3
4
# 顯示比對某個結果的前三行和後三行,使用 -C 選項:
seq 10 | grep "5" -C 3
# 如果比對結果有多個,會用“--”作為各比對結果之間的分隔符:
echo -e "a\nb\nc\na\nb\nc" | grep a -A 1
a
b
--
#查詢目錄下所有檔案數量
ll -R /root/test |egrep "^[sl-][rwx-]{9}" | wc -l
本文轉自 民工哥 51CTO部落格,原文連結:http://blog.51cto.com/mingongge/1981139