grep : Global search REgular expression and Printout the line.
文本搜索工具。根據用戶指定的文本模式(正則表達式元字符及正常字符組合而成)對目標文件進行逐行搜索,顯示能匹配到的行。
grep 命令:
grep [OPTIONS] PATTERN [FILE...]
--color[=WHEN](輸出是把匹配到的字符是否標記)
參數如下:
auto
always
never
-o 顯示被匹配到的內容(特定環境需要)
例如:使用echo命令輸出一個絕對路徑,使用grep 取出基名。
[root@localhost /]# echo /etc/rc.d/init.d/functions | grep -o -E "[[:alnum:]]+/?$"
functions
-i ignore(忽略) 不區分字符大小寫。(適用於單字符)
-v 不能被模式匹配到的(反向選取)
-E 使用擴展的正則表達式
-A
-B
-C
正則表達式(REGEXP):元字符和正常字符所書寫的模式。
基本正則表達式:(grep)
擴展的正則表達式:(egrep)
元字符的功能:表達控制或統一匹配。
元字符匹配:
. 匹配任意單個字符。(個數爲一個)
[] 指定範圍內的單個字符。
[^] 指定範圍外的單個字符。
[[:digit:]] 數字 ([:digit:]=[0-9])
[[:lower:]][[:upper:]] 小,大 寫字母
[[:space:]] 空白字符
[[:punct:]] 標點符號
[[:alnum:]] 所有的字母(包括大小寫)和數字
[[:alpha:]] 所有字符(包括大小寫)
[[::]]這裏的 :: 需要特特別注意,別打錯了。不然命令行解釋不了。
次數匹配:
* 任意長度(0-無窮次)
.* 組合表示任意長度任意字符
\? 匹配前面字符0-1次;
\+ 1次或多次
\{m\} m次
\{m,n\} 至少m次,至多n次
\{0,n\} 至多n次
\{m,\} 至少m次
位置錨定(出現的位置):
^ 行首
$ 行尾
^$ 連用可以匹配整行。
\< \b 匹配塊首(字符串不包括空格字符)
\> \b 匹配塊尾
\< \> \b \b 整塊匹配
分組:\(\)
注意:分組中的模式,在某次的具體匹配過程中的所匹配的字符,可以被grep 記憶(保存於內置的變量中),還可以被引用。
\1:引用,模式中自左而右,由第一個左括號以及與之對應的右括號中的模式所匹配到的內容。
\2:引用,模式中自左而右,由第二個左括號以及與之對應的右括號中的模式所匹配到的內容。
擴展的正則表達式:(表現形式不同,意義都一樣。只是有些不用 \ )
字符匹配:
. 匹配任意單個字符。(個數爲一個)
[] 指定範圍內的單個字符。
[^] 指定範圍外的單個字符。
[[:digit:]] 數字 ([:digit:]=[0-9])
[[:lower:]][[:upper:]] 小,大 寫字母
[[:space:]] 空白字符
[[:punct:]] 標點符號
[[:alnum:]] 所有的字母(包括大小寫)和數字
[[:alpha:]] 所有字符(包括大小寫)
次數匹配:
* 任意長度(0-無窮次)
? 匹配前面字符0-1次;
+ 1次或多次
{m} m次
{m,n} 至少m次,至多n次
{0,n} 至多n次
{m,} 至少m次
位置錨定(出現的位置):
^
$
\< \b (唯一grep 和egrep 用\ 沒變的)
\> \b (唯一grep 和egrep 用\ 沒變的)
分組:
()
引用:\1,\2,.....
或者:
a|b
例子:找出ifconfig命令結果中的1-255之間的數字。
[root@localhost /]# ifconfig | grep -E "\b([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9]|25[0-5])\b"
eth0 Link encap:Ethernet HWaddr 00:0C:29:79:E3:14
inet addr:172.16.249.71 Bcast:172.16.255.255 Mask:255.255.0.0
inet6 addr: fe80::20c:29ff:fe79:e314/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX bytes:7696098 (7.3 MiB) TX bytes:1477862 (1.4 MiB)
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1