1. 简介
1.1. 功能
搜索输入文件中满足匹配指定模式的文本行,并将匹配行输出到标准输出。
1.2. 用法
grep [option…] [patterns] [file…]
1.3. 参考
- 官方手册页面:http://www.gnu.org/software/grep/manual/grep.html
- 帮助命令:
man grep
grep --help
2. 选项详解
2.1. 匹配控制选项
选项 |
描述 |
示例 |
-e |
expression ,指定正则表达式,可重复指定 |
echo $'ABCDnAbCdnabcd'|grep -e 'ABC' -e 'abc' |
-f |
file ,从文件中读取表达式,一行为一个表达式 |
|
-i |
ignore ,忽略大小写 |
echo $'ABCDnAbCdnabcd'|grep -i 'abc' |
-v |
invert ,反向匹配,匹配不满足表达式的行 |
echo $'ABCDnAbCdnabcd'|grep -v 'ABC' |
-w |
word ,单词匹配,匹配表达式在行中为单词的行 |
echo $'ABC DEFn”DEF"nCDEF'|grep -w 'DEF' |
-x |
exactly ,全行匹配,要求整行匹配表达式 |
echo $'ABC DEFnDEF'|grep -x 'DEF' |
2.2. 通用输出控制选项
选项 |
描述 |
示例 |
-c |
count ,只输出匹配到的总行数 |
echo $'ABCDnAbCdnabcd'|grep -ic 'abc' |
-l |
files-with-matches ,只输出包含匹配行的文件名 |
grep -l 'root' /etc/passwd /etc/hosts |
-L |
files-without-match ,只输出不包含匹配行的文件名 |
grep -L 'root' /etc/passwd /etc/hosts |
-m |
max-count ,匹配到指定行数后停止匹配,只输出前面匹配到的行 |
echo $'AnABnAB'|grep -m 2 'A' |
-o |
only-matching ,只输出行中的匹配部分,一行中多个匹配项会分行输出 |
echo $'AnABnABA'|grep -o 'A' |
-q |
quiet ,屏蔽所有输出,只要匹配到了一行,立刻以0状态退出 |
echo 'A'|grep -q 'A';echo $? |
-s |
slient ,屏蔽错误信息 |
grep -s 'A' nonexistentFile |
2.3. 输出前缀控制选项
选项 |
描述 |
示例 |
-b |
byteOffset ,添加匹配行的字节偏移量前缀,结合-o 为匹配项的字节偏移量 |
echo $'BnABnB'|grep -b 'B' |
-h |
hideFileName ,不添加匹配行的文件名前缀 |
grep -h 'root' /etc/passwd /etc/hosts |
-H |
添加匹配行的文件名前缀,多个输入文件时为默认选项 |
grep -H 'root' /etc/passwd |
-n |
number ,添加行号前缀 |
grep -n 'root' /etc/passwd |
-T |
table ,多个前缀时,使用TAB进行对齐,前缀顺序:Hnb |
grep -THnb 'root' /etc/passwd |
-Z |
zero ,使用NUL 字符分隔文件名,可结合-l 使用 |
grep -Zl 'o' /etc/passwd /etc/hosts |
2.4. 上下文行控制选项
选项 |
描述 |
示例 |
-A |
after ,附带输出匹配行的前几行,和匹配行组合一个组 |
grep -A2 'root' /etc/passwd |
-B |
before ,附带输出匹配行的后几行 |
grep -B2 'root' /etc/passwd |
-C |
context ,附带输出匹配行的前后几行 |
grep -C2 'root' /etc/passwd |
--group-separator |
指定组的分隔符,默认为-- |
grep -C1 --group-separator='==SEP==' 'root' /etc/passwd |
--no-group-separator |
不使用组分隔符 |
grep -C1 --no-group-separator 'root' /etc/passwd |
2.5. 文件和目录选项
选项 |
描述 |
示例 |
-r |
recursive ,递归的读取目录下的所有文件 |
grep -r 'localhost' /etc |
-R |
recursive ,递归的读取目录下的所有文件,包括符号链接 |
grep -r 'localhost' /etc |
--exclude |
跳过匹配指定表达式的文件 |
grep -rl 'localhost' /etc --exclude='hosts*' |
--exclude-from |
从指定文件中读取要跳过的文件表达式` |
|
--exclude-dir |
跳过匹配指定表达式的目录 |
grep -rl 'localhost' /etc --exclude-dir='pki' |
3. 正则表达式说明
grep中的正则表达式官方介绍: http://www.gnu.org/software/grep/manual/grep.html#Regular-Expressions