grep 全称是 Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户,grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来
常用选项:
-E :开启扩展(Extend)的正则表达式,使用 | 来分割多个pattern,以此实现OR操作
-i :忽略大小写(ignore case)
-v :反过来(invert),只打印没有匹配的,而匹配的反而不打印
-n :显示行号
-w :被匹配的文本只能是单词,而不能是单词中的某一部分
-c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到
-o :只显示被模式匹配到的字符串
-e :实现多个选项的匹配,逻辑or关系
--color :将匹配到的内容以颜色高亮显示。
-A n :显示匹配到的字符串所在的行及其后 n 行
-B n :显示匹配到的字符串所在的行及其前 n 行
-C n :显示匹配到的字符串所在的行及其前后各 n 行
正则表达式
通过一些特殊字符,来表示一类字符内容,然后交给前面的命令来执行;如果使用特殊字符本身的含义就需要‘\’进行转译。
1、字符匹配
. // 任意一个字符
[] // 匹配范围内的任意一个字符
[^] // 范围外任意一个字符
次数匹配
* // 匹配前面的字符0次到n次
\? // 匹配前面的字符0次到1次
\+ // 匹配前面字符1次到n次
\{m\} // 匹配前面的一个字符m次
\{m,n\} // 匹配前一个字符m到n次
\{0,n\} // 匹配前面的字符0次到n次(0必须加)
\{m,\} // 匹配前面一个字符至少m次
位置锚钉
^ // 锚定行首
$ // 锚定行尾
\b // 锚定词首或词尾(用在前面为词首,后面为词尾)
\> // 锚定词尾
\< // 锚定词首
分组
特性:
默认情况下,Linux系统会为分组指定变量,变量的表示形式\1 \2 \3 ...(后向 引用)
abc* // 我们把abc看成一个整体
\(\) // 将里面的看作是一个整体进行匹配
补充:
扩展正则表达式分组用"()"表示;
标准正则表达式中的"\"可以去掉;
grep 实例
cat test.txt
abc
aabc
aaabbbc
good
alice
# 查找文本中 包含 "a",2-3次行
grep 'a\{2,3\}' test.txt
aabc
aaabbbc
# 查找文本中 以 "d" 结尾的行
grep "d$" test.txt
good
# 查找文本中 以 "a" 开头的行
cat test.txt | grep ^a
abc
aabc
aaabbbc
alice
# 同时过滤空白行与注释行
cat test.txt | grep -v '^$' | grep -v '^#'
# 显示不以 # 开头的行
cat test.txt | grep ^[^#]