linux shell 指令碼之深入淺出的grep的用法
今天在糾結grep用法時候,由於講解的教材比較少,糾結了較長的時間。最終還是攻下了,所以拿出來給大家分享。
grep
顯示匹配一個或多個模式的文字行,時常會作為管道後的第一步,以便對匹配上的資料做進一步處理。
最常見用法,查詢檔案內字串
[root@localhost /]# grep root /etc/shadow
root:$1$HFDnk5hm$DSAc4IUls1yUyocXFNQ.A.:15141:0:99999:7:::
[root@localhost /]#
引數
-E 使用擴充套件正規表示式進行匹配,使用grep –E 代替傳統的擴充套件正規表示式 egrep
擴充套件正規表示式和正規表示式的區別: (-E選項的作用)
+ 匹配一個或多個先前的字元
[root@localhost space]# touch test
[root@localhost space]# vim test
aaaredhat
bbbredhat
yyyredhat
zzzredhat
redhataaa
redhatbbb
redhatyyy
redhatzzz
:wq
[root@localhost space]# cat test|grep –E '[a-h]+redhat'
aaaredhat
bbbredhat
[root@localhost space]#
[root@localhost space]# cat test|grep -E 'redhat+[h-z]'
redhatyyy
redhatzzz
[root@localhost space]#
當去掉-E選項的時候,正規表示式是不支援這樣查詢的。
[root@localhost space]# cat test|grep 'redhat+[a-z]'
[root@localhost space]#
? 匹配零個或多個先前的字元
[root@localhost space]# cat test|grep -E 'r?aaa'
aaaredhat
redhataaa
[root@localhost space]# cat test|grep 'r?aaa'
[root@localhost space]#
a|b|c 匹配a或b或c
[root@localhost space]# cat test|grep -E 'b|z'
bbbredhat
zzzredhat
redhatbbb
redhatzzz
[root@localhost space]# cat test|grep 'b|z'
[root@localhost space]#
() 分組符號
[root@localhost space]# cat test|grep -E 'redha(tz|ta)'
redhataaa
redhatzzz
[root@localhost space]# cat test|grep 'redha(tz|ta)'
[root@localhost space]#
x{m} 重複字元x,至少m次 (如果用正規表示式,格式為x\{m,\})
[root@localhost space]# cat test|grep -E 'a{3}'
aaaredhat
redhataaa
[root@localhost space]# cat test|grep 'a\{3,\}'
aaaredhat
redhataaa
[root@localhost space]#
-F 使用固定字串進行匹配 grep –F 取代傳統的 fgrep 。 使用正規表示式; 預設情況下 grep 使用的就是正規表示式,grep = grep –F
-e 通常,第一個非選項的引數會指定要匹配的模式,這個模式以-號開頭時,grep就會混淆,而-e選項就將它確定為引數
[root@localhost space]# cat test|grep -e '-test'
-test
[root@localhost space]# cat test|grep '-test'
grep:無效選項 -- t
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.
[root@localhost space]#
-i 模式匹配時,忽略大小寫
[root@localhost space]# cat test|grep -i test
-test
-TEST
[root@localhost space]#
-l 列出匹配模式的檔名稱 (列出當前目錄下含有test字串的檔案)
[root@localhost space]# grep -l 'test' ./*
./test
./test2
[root@localhost space]#
-q 靜默模式,如果匹配成功,則grep會離開,不顯示匹配。
[root@localhost space]# grep test ./test
-test
[root@localhost space]# grep -q test ./test
[root@localhost space]#
-s 不顯示錯誤資訊
-v 顯示不匹配的項
[root@localhost space]# cat test|grep test
-test
[root@localhost space]# cat test|grep -v test
-TEST
[root@localhost space]#
相關文章
- 【SHELL】grep 命令用法
- 注意shell指令碼中ps -ef|grep的坑指令碼
- 深入淺出JVM(十)之位元組碼指令(下篇)JVM
- 【Shell】sed xargs grep awk的組合用法
- linux常用的shell指令碼Linux指令碼
- shell中set指令的用法
- Linux下Shell基礎知識深入淺出(轉)Linux
- shell指令碼專題-----cat,find,grep,awk,sed(五)指令碼
- linux shell指令碼中 =~ 的作用Linux指令碼
- 理解 shell 指令碼中的常見用法: 2>&1指令碼
- Linux Shell指令碼Linux指令碼
- Linux shell 指令碼Linux指令碼
- 深入淺出JavaScript之thisJavaScript
- Linux shell指令碼的字串擷取Linux指令碼字串
- 有點用的linux shell 指令碼Linux指令碼
- Linux 中 grep xxx的用法Linux
- Linux shell:執行shell指令碼的幾種方式Linux指令碼
- 2020-12-31 Linux Shell指令碼if else 與或的用法Linux指令碼
- Shell 中 $ 關於指令碼引數的幾種用法指令碼
- 【Linux】find指令和grep指令!!!Linux
- 大資料系列部落格之 — 深入簡出 Shell 指令碼語言(高階篇)大資料指令碼
- 前端釋出shell指令碼前端指令碼
- Linux shell 指令碼分享Linux指令碼
- linux中grep基本用法Linux
- linux shell之do done及for 迴圈指令碼Linux指令碼
- shell指令碼之迴圈指令碼
- 什麼是Shell指令碼?Shell指令碼在Linux運維工作中的地位!指令碼Linux運維
- 深入淺出 FlatBuffers 之 Schema
- 面向 DBA 的 Linux Shell 指令碼簡介Linux指令碼
- 反射的深入淺出反射
- 深入淺出this的理解
- 深入淺出 OkHttp 原始碼HTTP原始碼
- 深入淺出URL編碼
- linux shell小指令碼分享Linux指令碼
- 你不知道的shell用法和指令碼,簡單&強大指令碼
- Linux學習之Shell指令碼語言的優勢是什麼?Linux指令碼
- 一起學shell(十一)之安全的shell指令碼:起點指令碼
- Linux必須掌握的shell指令碼基礎Linux指令碼