grep:
description
- Global search Regular expression and Print out the line.
function
- 文本搜索工具廊蜒,根據(jù)用戶指定的"模式"對目標(biāo)文本進(jìn)行匹配檢查倡蝙;打印匹配到的行;
parttern - 由正則表達(dá)式字符及文本字符所編寫的過濾條件
- REGXP: 由一類特殊字符及文本所編寫的某事刽肠,其中有些字符不表達(dá)字符字面意義,而表示控制或通配功能
- 基本正則表達(dá)式: BRE(grep 默認(rèn)支持)
- 擴(kuò)展正則表達(dá)式: ERE (grep -E,egrep)
- 正則表達(dá)式引擎:
- REGXP: 由一類特殊字符及文本所編寫的某事刽肠,其中有些字符不表達(dá)字符字面意義,而表示控制或通配功能
synopsis
grep [OPTION...] PATTERNS [FILE...]
grep [OPTION...] -e PATTERNS ... [FILE...]
grep [OPTION...] -f PATTERN_FILE ... [FILE...]
options
- --color=auto: 對匹配到的文本著色顯示
- -v: 顯示沒有被pattern匹配到的行
- -i: 匹配時忽略大小寫
- -o: 僅顯示匹配到的字符串
- -q: 不輸出任何信息
- -A #: after, 后#行
- -B #: befire, 前#行
- -C #: context, 前后各#行
- -E: 使用ERE
基本正則表達(dá)式原字符
字符匹配
- .: 匹配任意單個字符
- [0-9...]: 匹配指定范圍內(nèi)的任意單個字符
- [^]: 匹配指定范圍外的任意單個字符
- [:digit:] 任意數(shù)字,相當(dāng)于0-9(實際用的時候要[[:digit:]]這樣用)
- [:lower:] 任意小寫字符
- [:upper:] 任意大寫字符
- [:alpha:] 任意大小寫字符
- [:alnum:] 任意數(shù)字或字母
- [:space:] 任意空格字符
- [:punct:] 標(biāo)點符號
- [:alnum:] [:alpha:] [:blank:] [:cntrl:]
- [:digit:] [:graph:] [:lower:] [:print:]
- [:punct:] [:space:] [:upper:] [:xdigit:]
匹配次數(shù): 用在要指定次數(shù)的字符后面竭沫,用于指定前面的字符要出現(xiàn)的次數(shù)
- *:匹配前面的字符任意次
- 例如: grep "x*y"能匹配到"abxy","xay","ay","xxxxxxy"
- . *: 任意長度的任意字符
- ?: 匹配其前面的字符0次或1次,即可有可無
- +: 匹配其前面的字符至少一次
- {m}: 匹配前面的字符m次
- {m,n}: 匹配前面的字符至少m次,至多n次
- {0,n}: 匹配前面的字符至多n次
- {m,}: 匹配前面的字符至少m次
位置錨定
- ^: 行首錨定: 用于模式最左側(cè)
- $: 行尾錨定: 用于模式最右側(cè)
- ^PATTERN$: 用于模式匹配整行
- ^$: 空行
- ^[[:space;]]*$
- < 或 \b: 詞首錨定: 用于單詞模式的左側(cè)
- > 或 \b: 詞尾錨定: 用于單詞模式的右側(cè)
- <PATTERN>: 匹配整個單詞
分組
- (): 將一個或多個字符捆綁在一起橙困,當(dāng)作一個整體處理 例如 (xy)*ab
Note 分組括號中的模式匹配到的內(nèi)容會被正則表達(dá)式引擎記錄于內(nèi)部的變量中依啰,這些變量的命名方式為: \1,\2,\3,.....
- 后向引用: 引用前面的分組括號中的模式所匹配的字符串,(而非模式本身)
練習(xí)
- 顯示/proc/meminfo文件中以大小s開頭的行(要求: 使用兩種方式)
grep -i '^s' /proc/meminfo
grep '^[Ss]' /proc/meminfo - 顯示/etc/passwd文件中ID號最大的用戶的用戶名
sort -t : -k 3 /etc/passwd | tail -1 | cut -d : -f 1 - 顯示/etc/passwd文件中不以/bin/bash結(jié)尾的行
grep -v "/bin/bash$" /etc/passwd - 如果root用戶存在, 顯示其默認(rèn)的shell程序
grep '^root>' /etc/passwd &>/dev/null && grep '^root>' /etc/passwd | cut -d : -f 7
id root &> /dev/null && grep '^root>' /etc/passwd | cut -d : -f 7 - 找出/etc/passwd中的兩位或三位數(shù)
grep -o '[[:digit:]]{2,3}>' /etc/passwd - 顯示/etc/rc.d/rc.sysinit文件中, 至少以一個空白字符開頭且后面存在非空白字符的行
grep '[[:space:]]+[["space"]]+' /etc/grub2.cfg - 找出"netstat -tan" 命令的結(jié)果中以'LISTEN'后跟0案训、1或多個空白字符結(jié)尾的行
netstat -tan | grep '<LISTEN[[:space:]]$*' - 添加用戶bash买置、testbash、basher萤衰、以及nologin(其shell為/sbin/nologin): 而后找出/etc/passwd文件中用戶名同shell名的行
grep '(^[[:alnum:]]>).\1$' /etc/passwd
egrep
egrep = grep -E
synopsis
egrep [OPTIONS] PATTERN [FILE...]
PATTERNB擴(kuò)展正則表達(dá)式
字符匹配
- .
- [fdsafd]
- [^]
次數(shù)匹配
- *
- ?
- +
- {m}
- {m,n}
錨定
- ^
- $
- <,\b
- >,\b
分組
- ()
后向引用: \1,\2
或者
- a|b
練習(xí)
- 顯示/proc/meminfo文件中以大小s開頭的行(要求: 使用兩種方式)
egrep -i '^s' /proc/meminfo
egrep '^[Ss]' /proc/meminfo - 顯示/etc/passwd文件中ID號最大的用戶的用戶名
sort -t : -k 3 /etc/passwd | tail -1 | cut -d : -f 1 - 顯示/etc/passwd文件中不以/bin/bash結(jié)尾的行
egrep -v "/bin/bash$" /etc/passwd - 如果root用戶存在, 顯示其默認(rèn)的shell程序
egrep '^root>' /etc/passwd &>/dev/null && egrep '^root>' /etc/passwd | cut -d : -f 7
id root &> /dev/null && egrep '^root>' /etc/passwd | cut -d : -f 7 - 找出/etc/passwd中的兩位或三位數(shù)
egrep -o '[[:digit:]]{2,3}>' /etc/passwd - 顯示/etc/grub2.cfg文件中, 至少以一個空白字符開頭且后面存在非空白字符的行
egrep '[[:space:]]+[["space"]]+' /etc/grub2.cfg - 找出"netstat -tan" 命令的結(jié)果中以'LISTEN'后跟0堕义、1或多個空白字符結(jié)尾的行
netstat -tan | egrep '<LISTEN[[:space:]]$*' - 添加用戶bash、testbash脆栋、basher倦卖、以及nologin(其shell為/sbin/nologin): 而后找出/etc/passwd文件中用戶名同shell名的行
egrep '(^[[:alnum:]]>).\1$' /etc/passwd - 顯示當(dāng)前系統(tǒng)root、centos或user1用戶的默認(rèn)shell和UID
egrep '^(root|centos|user1)>' /etc/passwd | cut -d : -f 3,7 - 找出/etc/rc.d/init.d/functions文件(centos6)中某單詞后面跟一個小括號的行
egrep -o '[_[:alpha:]]+()' /etc/rc.d/init.d/functions - 找出ifconfig命令結(jié)果中1-255之間的數(shù)值
ifconfig | egrep -o '<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>' - 找出ifconfig命令結(jié)果中的ip地址
ifconfig | egrep -o '(<([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>.){3}<([0-9]|1[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>'