系列文章目录
第一章 正则表达式,一张表教你学会
第二章 Linux之awk的进阶使用
第三章 Linux之sed命令的基本使用
第四章 Linux之grep、egrep命令(文本三剑客完)
前言
大家可知道赫赫有名的文本三剑客?没错,它们就是grep、sed和awk,听说只要掌握了它们,就没有什么文本处理可以难倒你啦。
那在之前呢我已经发过了 sed 以及 awk 的使用教程感兴趣的小伙伴可以去看看呀。
言归正传,今天我们就把最后的 grep 以及其扩展 egrep 快速掌握吧
一、grep有什么用,和egrep是什么关系
grep命令全名为 Global search Regular Expression and Print out the line
而egrep则是其扩展版(Extended)
grep 命令是一个字符串和模式匹配的工具,它可以显示多个文件中匹配的行。它也可以用来处理其他命令的管道输出,经常用于需要过滤文本的场景
二、如何使用
1.语法
grep命令的基本语法是:
grep [options] pattern [files]
其中pattern是要搜索的字符串或正则表达式,files是要搜索的文件,如果省略则从标准输入读取。
options是一些可选参数
ps:正则表达式还不熟悉的同学可以看看我之前的 “一表学会正则” 哦
2.选项
-i 不区分大小写 --ignore
-n 显示行号 --line-number
-c 只显示匹配行的数量 --count
-r 递归搜索子目录中的文件 --recursive
-o 只匹配指定内容,输出也是指定内容 --only-match
$ cat index.html |grep -o "html"
html
html
html
html
-v 取反,显示不匹配的内容,整行匹配,与正则中的 " [^] " 的颗粒度不同 --invert-match
-A 多显示匹配内容之后的n行 --after
-B 多显示匹配内容之前的n行 --before
-C 多显示匹配内容前后的n行 --center
$ egrep -C1 "dad" rex.txt # 多显示了dad上下各1行
abbbbb`
dad
wqq
3.egrep扩展了什么
egrep 等同于 grep -E
其主要是对正则表达式中增加了以下元字符:
- | 表示或,例如 egrep ‘a|b’ 表示匹配a或b
- + 表示一次或多次重复,例如 egrep ‘a+’ 表示匹配一个或多个a
- ? 表示零次或一次重复,例如 egrep ‘a?’ 表示匹配零个或一个a
- () 表示分组,例如 egrep ‘(ab)+’ 表示匹配ab的一个或多个重复
- {} 表示出现次数,例如 egrep ‘a{3}’ 表示匹配a出现3次
在grep中使用它们不加-E的话,表达的则仅仅是其本身这个符号
从以下示例可以看出:
[root@localhost ~]$ echo abcbccc |grep "a(bc)+" # 匹配失败
[root@localhost ~]$ echo abcbccc |egrep "a(bc)+"
abcbccc
[root@localhost ~]$ echo abcbccc |grep "abcbc{3}" # 匹配失败
[root@localhost ~]$ echo abcbccc |egrep "abcbc{3}"
abcbccc
[root@localhost ~]$ echo abcbc{3} |grep "abcbc{3}" # 匹配了{}本身
abcbc{3}
总结
以上就是今天要讲的内容,本文简单介绍了grep的使用,足以在日常中使用,而更复杂文本处理内容可以参考 awk 和 sed 的文章,有什么问题也欢迎大家评论和指正,感谢大家观看!