在工作中经常用到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 当作扩展正则表达式;