grep命令
格式:grep [-acinv] [--color=auto] '查詢字串' filename
-a 將binary檔案以text檔案的
-c 計算找到 ‘查詢字串’ 的次數
-i 忽略大小寫的不同,所以大小寫視為相同
-n 順便輸出行號
-v 反向選擇,即顯示出沒有 ‘查詢字串’ 內容的那一行
--color=auto 關鍵部分加上顏色顯示
基礎正則
^:行首
$:行尾
查詢以0為行首:
查詢以3為行尾:
. 代表一定有一個任意字元的字元
\轉義字元,將特殊字元的特殊含義去掉
*重複0個到無窮多個的前一個字元(一定要切記是0到無窮多個,如果你想grep帶有‘3’的行,用‘3*’是無效的,應該為‘33*’,其實grep ‘3’ = grep ‘33*’)
[list], [abc]則或a或b或c,[0-9]則0-9範圍中任意一個,同理[a-z]或[A-Z]
[^list] 取不在該範圍內的字元,下面例子,grep一整行皆為非小寫字母字元的行。*為0到無限多個的意思,如果有了擴充套件正則表示式,用+可以表達1到1個以上。
\{n,m\} \{n,\} \{\,m}
擴充套件正則表示式
一定要注意:擴充套件正則表示式要寫為egrep
+ 與之前*相對應是一個或以上前一個字元
egrep '^[^a-z]+$' = grep '^[^a-z][^a-z]*$'
? 0個或一個前一個字元
| 或
()一組字元
()+ 多個重複組
標識字符集,例如可以用[:digit:]代替[0-9] 例項:egrep -n '^(12|2[[:digit:]][[:digit:]]|(29|30|31|32)[[:digit:]][[:digit:]])$' file*
(查詢n,n=12或200<=n<=299或2900<=n<=3299)
[:alnum:] 字母和數字
[:alpha:] \a 字母
[:lower:] \l 小寫字母
[:upper:] \u 大寫字母
[:blank:] 空白字元(空格和製表符)
[:space:] \s 所有空格符(比[:blank:]包含的範圍廣)
[:cntrl:] 不可列印的控制字元(退格、刪除、警鈴...)
[:digit:] \d 十進位制數字
[:xdigit:] \x 十六進位制數字
[:graph:] 可列印的非空白字元
[:print:] \p 可列印字元
[:punct:] 標點符號
最後,grep可以抓取多個檔案中的字元,grep -n ‘正則表示式’ file1 file2