grep介绍
grep
全称 Globally search a Regular and Print
,它是一个最初用于 Unix
操作系统的命令行文本搜索工具。 在给出文件列表或标准输入后,grep
会对匹配一个或多个正则表达式的文本进行搜索,并只输出匹配(或者不匹配)的行或文本。Unix
的 grep
家族包括 grep、egrep
和 fgrep
。
grep语法格式
语法格式: grep [options][pattern][file]
grep [参数][匹配模式][查找的文件]
参数选项:
参数 | 参数说明 |
---|---|
-n | 显示匹配内容行号 |
-c(count) | 计算找到所匹配内容的行数 |
–color=auto | 显示匹配内容的颜色 |
-i(ignore) | 忽略大小写 |
-v(invert) | 反向选择 |
-o(only) | 只显示匹配的内容 |
-An(after) | 显示匹配内容后的n行内容 |
-Bn(before) | 显示匹配内容前的n行内容 |
-Cn(context) | 显示匹配内容前后的n行内容 |
-E | 支持扩展的正则表达式 |
-V | 显示软件版本信息 |
例子
以下例子中用到的SQL文件是wiki文档中的学生信息
查找 学生信息.sql 中含有 ‘left join’ 的句子
1 | grep -n --color=auto 'left join' 学生信息.sql |
查找 学生信息.sql 中含有 ‘left join’ 的内容数量
1 | grep -c 'left join' 学生信息.sql |
忽略大小写
1 | grep -c -i 'left join' 学生信息.sql |
‘left join’ 后一行内容
1 | grep -A1 --color=auto 'left join' 学生信息.sql |
‘left join’ 前后一行内容
1 | grep -C1 --color=auto 'left join' 学生信息.sql |
查找’left join’ 前后一行内容且含有 ‘lesson_plan_order’ 的内容
1 | grep -n -C1 --color=auto 'left join' 学生信息.sql | grep ' lesson_plan_order' |
查找’left join’ 前后一行内容且排除含有 ‘lesson_plan_order’ 的内容
1 | grep -n -C1 --color=auto 'left join' 学生信息.sql | grep -v ' lesson_plan_order' |
从文件夹中查找所有含有 ‘left join’ 的文件及相关内容
1 | $ grep -n 'left join' * |
正则表达式
基础正则表达式
字符集 | 说明 | 例子 |
---|---|---|
^ | 定位行的开始 | “^when” 匹配以when开头的行 |
$ | 定位行的结束 | “where$” 匹配以where结尾的行 |
. | 匹配一个非换行字符 | “少儿.*思维” 匹配少儿思维中间跟任意个字符的行 |
* | 匹配零个或多个先前字符 | “^ *when” 匹配以when开头前面跟任意多空格的行 |
[] | 匹配一个指定范围内的字符 | “[Jj]oin” 匹配 Join 和 join |
[^] | 匹配一个不在指定范围内的子字符 | “[\^A-IK-Z]oin” 匹配 不包含A-I和K-Z字母开头,紧跟oin的行 |
< | 定位单词的开始 | “<name” 匹配含有name单词的且name前没有除空白字符外的其他字符法的行 |
> | 定位单词的结尾 | “name>”匹配含有name单词的且name后没有除空白字符外的其他字符法的行 |
x{m} | 连续重复字符x,m次 | “s{2}” 匹配连续出现两个s的行 |
x{m,} | 连续重复字符x,至少m次 | “s{2,}” 匹配至少连续出现两个s的行 |
x{m,n} | 连续重复字符x,至少m次,最多n次 | “s{2, 4}” 匹配至少连续出现两个s,最多4个s的行 |
拓展正则表达式
在使用 grep
时基础正则表达式可以满足大部分日常需求,如果有特殊需求,需要进行复杂的匹配,那么grep -E
支持拓展的正则表达式。
参考文章
4. linux - grep常用正则表达式,过滤文本内容)
5. grep与正则表达式