用法
grep [选项]... PATTERN [FILE]...
command | grep [选项]... PATTERN
- 在每个 FILE 或是标准输入中查找 PATTERN。
- 默认的 PATTERN 是一个基本正则表达式(缩写为 BRE)。
- 例如: 在menu.h 和 main.c 文件中查找Hello world关键字所在的行
grep -i 'hello world' menu.h main.c
常用选项:
- -E PATTERN 是一个可扩展的正则表达式(缩写为 ERE)
- -i 忽略大小写
- -n 显示行号
- -F 使用字符串匹配,不去使用字符串中的正则表达式的含义。
- -x 强制 PATTERN 仅完全匹配一行,连空格都不行
- -r 递归搜索当前目录以及子目录下的文件中的匹配行
- -c 统计count,输出行的数量
- -w 匹配单词,前后有空格。
- -l 列出匹配文件的文件名,不显示匹配内容 (适用于多文件查找和递归查找)
- -h 列出匹配项,不显示文件名 (适用于多文件查找和递归查找)
- -v 排除匹配行
练习
测试文件
i love python
lovelove python
loooove
I LOVE PYTHON
I LOVE pYtHoN
py.*
love
i love you
a python
looove yooou
aa`
i love python
PytHon is aa
lovelove
i love python
忽略大小写匹配
grep -i python file
i love python
lovelove python
I LOVE PYTHON
I LOVE pYtHoN
忽略大小写匹配并显示行号
grep -in python file
1:i love python
2:lovelove python
4:I LOVE PYTHON
5:I LOVE pYtHoN
使用可拓展的正则表达式
grep -E "py|PY" file
i love python
lovelove python
I LOVE PYTHON
py.*
grep -E "py|PY" file file1
file:i love python
file:lovelove python
file:I LOVE PYTHON
file:py.*
file1:a python
递归查找并使用可拓展正则表达式
grep -rE "py|PY"
file:i love python
file:lovelove python
file:I LOVE PYTHON
file:py.*
file1:a python
test/file:i love python
test/file:i love python
不使用正则匹配用字符串表面意思匹配
grep -rF py.*
file:py.*
使用管道符,组合使用
# 查询/etc/passwd 中 有bash的行
cat /etc/passwd | grep "bash"
root:x:0:0:root:/root:/bin/bash
多个管道符使用
# 查询nginx进程 去除命令本身的grep进程
ps -ef | grep nginx | grep -v grep
root 4458 1 0 6月10 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 4459 4458 0 6月10 ? 00:00:25 nginx: worker process
注:
- 其他的可以自己去试试
- 正则表达式内容还是比较多的,如果没有学过可以去搜索一下,学起来很快。
- 什么是可拓展正则表达式也可以去搜索一下