Shell編程—【06】Linux的grep命令經常使用選項及示例

用法

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 排除匹配行

練習

測試文件

  • file
i love python
lovelove python
loooove
I LOVE PYTHON
I LOVE pYtHoN
py.*
複製代碼
  • file1
love
i love you
a python
looove yooou
aa`
複製代碼
  • test/file
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
複製代碼

注:

  • 其餘的能夠本身去試試
  • 正則表達式內容仍是比較多的,若是沒有學過能夠去搜索一下,學起來很快。
  • 什麼是可拓展正則表達式也能夠去搜索一下
相關文章
相關標籤/搜索