# grep 和 egrep
# 定义
相当于一个过滤器,grep 和 egrep 总体来说都是实现了文本的过滤。egrep 的 e 相当于是 extend 扩展。egrep 多了一些扩展正则表达式的选项。用得最多的还是 grep。
# 语法格式
过滤查找是以行为单位的
option 是可选项,pattern 是必选项
如果是一个目录那么必须加 -r 递归搜索才能进行
扩展正则表达式和基本正则表达式是两个概念,并不是说 grep 就不能使用正则表达式了
# 第一种语法格式
grep [option][pattern][file1,file2]
# 第二种语法格式
command | grep [option][pattern]
cat /etc/passwd | grep -n "doc.*"
必须掌握的选项:
选项 含义 -v 显示不匹配 pattern 的行 -i 搜索时忽略大小写 -n 显示行号 -E 支持扩展的正则表达式 -F 不支持正则表达式,按字符串的字面意思进行匹配 -r 递归搜索 需了解的选项:
选项 含义 -c 只输出匹配行的数量,不显示具体内容 -w 匹配整词 -x 匹配整行 -l 只列出匹配的文件名,不显示具体匹配行内容 grep -v "^$"
表示忽略空行
# 查找etc中passwd文件中含有doc字符串的行并显示行号
grep -n doc /etc/passwd
# 查找当前目录下docs文件下所有文件含有doc字符串的忽律大小写的内容行并显示行号
grep -rni doc docs
# 查找当前目录下扩展正则表达式匹配python或PYTHON的行
grep -E "python|PYTHON" file
# 查找etc目录下含有.*:字符串的行(.*不表示正则了)
grep -rnF ".*:" /etc
# 查找当前目录下package.json 和 .gitignore文件中含有doc的行以及行号
grep -n "doc" package.json .gitignore
# 显示当前目录docs文件下文件中匹配"do.*"的总行数
grep -cr "do.*" docs
# cat /etc/passwd 内容之后在其中找满足"doc.*"的
cat /etc/passwd | grep -n "doc.*"
# grep 和 egrep:
grep 默认不支持扩展正则表达式,只支持基础正则表达式
使用 grep -E 可以支持扩展正则表达式
使用 egrep 可以支持扩展正则表达式,与 grep -E 等价
grep -E "python|PYTHON" file
# 等价
egrep "python|PYTHON" file