linux shell程式設計文本處理指令grep
linux中最為常用的三大文本(awk,sed,grep)處理工具之一,grep可以了解為過濾,通用的正規表達式分析程式,grep家族總共有三個:grep、egrep、fgrep。
pattern 模式 --》模闆
使用基本正規表達式
模式–》正規表達式–》用來表達某個意思–》利用正确的規則組合成一個公式,用來表達某個意思。
正規表達式–》是一些字元串,數字,特殊符号組合而成。
用途:在檔案中查找并顯示包含指定字元串的行
格式:grep [選項]... 模式 目标檔案
-i:查找時忽略大小寫 ignore case
-v:反轉查找,輸出與模式不相符的行 -v, --invert-match
-n:顯示符合模式要求的行号 number
-r:遞歸搜尋所有檔案
-o:隻顯示比對的内容 -o, --only-matching
-E: 支援更多的元字元(支援擴充正則) -E, --extended-regexp regular expression 正規表達式
元字元:有特殊作用的字元 ^ $
基本元字元 ^ $ *
擴充元字元 | + ? { }
egrep = grep -E
| 或者
-A: 找到比對行以及後幾行
-B:輸出比對行以及前幾行
-C:輸出前面和後面多少行
^ 代表以什麼開頭
$ 代表以什麼結尾
^$ 代表空行
^liuyong$ 一行裡隻有liuyong字元串
[1-9] 代表從1到9的任意一個數字
[a-Z] 從a-Z中取一個
[a-z] 從a-z中取一個
[A-Z] 從A-Z中取一個
[0-Z] 從0-9 和a-Z中取一個
[^0-Z] 不取0-Z的字元 -->取反
舉例
cat /etc/passwd |egrep "^ly[1-9]"
cat /etc/passwd |egrep "^root" 以root開頭的行
cat /etc/passwd |egrep "bash$" 以bash結尾的行
cat /etc/ssh/sshd_config |egrep -v "^$|^#"
通配符
* 代表比對前一個項任意次
? 代表比對前一個項0次或者1次
+ 代表比對前一個項 一次到多次
. 占位符 除\n之外的任意字元
{n,m} 比對前一項n到m次
.* 代表任意字元
例子
寫一個c類ip位址的正則
c類ip位址範圍
192~223
0~255