shell_grep
目录
grep 命令是一种强大的文本搜索工具,它能使用正则表达式,按照指定的模式去匹配,并把匹配的行打印出来。需要注意的是,
grep 只支持匹配而不能替换匹配的内容
,替换的功能可以由 sed 来完成。
1. 使用模式
grep [options] pattern [file...]
[options] 表示选项,具体的命令选项见下表。pattern 表示要匹配的模式(包括目标字符串、变量或者正则表达式),file 表示要查询的文件名,可以是一个或者多个。pattern 后面所有的字符串参数都会被理解为文件名。
选项 | 说明 |
---|---|
-color | 以颜色突出显示匹配到的字符串 |
-c | 只打印匹配的文本行的行数 ,不显示匹配的内容 |
-i | 匹配时忽略字母的大小写 |
-h | 当搜索多个文件时,不显示匹配文件名前缀 |
-n | 列出所有的匹配的文本行,并显示行号 |
-l | 只列出含有匹配的文本行的文件的文件名 ,而不显示具体的匹配内容 |
-s | 不显示关于不存在或者无法读取文件的错误信息 |
-v | 只显示不匹配的文本行 |
-w | 匹配整个单词 |
-x | 匹配整个文本行 |
-r | 递归搜索,搜索当前目录和子目录 |
-q | 禁止输出任何匹配结果,而是以退出码的形式表示搜索是否成功,其中 0 表示找到了匹配的文本行 |
-b | 打印匹配的文本行到文件头的偏移量,以字节为单位 |
-E | 支持扩展正则表达式 |
-P | 支持 Perl 正则表达式 |
-F | 不支持正则表达式,将模式按照字面意思匹配 |
-o | 仅显示匹配到的字符串 |
2. 使用案例
grep -n "syslog" g.txt #把包含 syslog 的行过滤出来
grep "^ntp" g.txt #把以 ntp 开头的行过虑出来
grep -A2 "syslog" g.txt #把匹配 ntp 的行以及下边的两行过滤出来
grep -B1 "syslog" g.txt #包含 syslog 及上边的一行过滤出来
grep -C1 "syslog" g.txt #把包含 syslog 以及上、下一行内容过滤出来
grep -e "root" -e "syslog" g.txt # 过滤包含 root 或 syslog 的行
grep -E "root|syslog" g.txt # 过滤包含 root 或 syslog 的行
grep -r "font" . #查看当前目录中包含某关键词的所有文件
grep -rnw --exclude-dir={.git,svn} "font" . #查看当前目录中包含某关键词的所有文件,排除某些目录