在工作中經常用到grep命令,在此做一下總結。
grep 用於匹配文件中符合條件的行。
用於測試的文本
> cat test.txt
aaaa
bbbbb
cccc
dddd
eeeeeee
ffff
各個選項
-A
-- after-context : 除了打印匹配的行,還要打印匹配行之後的幾行內容;
例如: 除了匹配“bb” ,還要知道該行的後三行內容。
> grep -A 3 "bb" test.txt
bbbbb
cccc
dddd
eeeeeee
-a
--text : 把所有的文件都當作ASCII文件。用人話就是說我們在匹配二進制文件時,如果匹配到內容就會打印"Binary file ...
matches'', 使用這個選項 就會把匹配的內容打印出來。
-B
--before-context: 與-A相關,是除了打印匹配的行,還要打印匹配行之前的幾行內容;
例如 : 除了匹配 “cc”, 還要知道該行的前三行內容。
> cat test.txt
aaaa
bbbbb
cccc
-b
--byte-offset : 打印匹配行之前,打印出匹配行第一個字符的偏移量。注意: 每行最後的回車換行也是算上的。
例如:我們要匹配 “bb”, 並想知道 “bb” 這一行的行首字符的偏移量。
> grep -b "c" test.txt
5:bbbbb
從而我們可以知道,行首字符b 偏移量是 5。
-C
--context: 打印匹配行,前後各打印幾行, 如果-C 2 則是等於 -A 2 -B 2;
例如: 我要匹配字符串 “cc” , 除此之外,還要打印前後的2行;
> grep -C 2 "cc" test.txt
aaaa
bbbbb
cccc
dddd
eeeeeee
-c
--count : 打印一共匹配了多少行
-D
--device: 對設備,FIFO,管道等文件設備 進行 read,skip 。特別注意,這樣會將fifo的數據讀取出來。
例如。我們創建一個fifo文件,並匹配其中的 “aa” ;
# 創建fifo
> mkfifo fifo_test
# 匹配 “aa”
> grep -D read "aa" fifo_test
# 開另一個終端
> cat aa > fifo_test
-d
--directories :針對目錄的一些操作
1. read 將目錄當作普通文件
2. recurse:遞歸遍歷,效果等同於-R 和 -r
3. skip : 忽略目錄
-E
--extended-regexp : 等效於 egrep, 將pattern 當作擴展正則表達式;