用法
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
注:
- 其他的可以自己去試試
- 正則表達式內容還是比較多的,如果沒有學過可以去搜索一下,學起來很快。
- 什么是可拓展正則表達式也可以去搜索一下