文件名通配(globbing):


glob 特殊字符,元字符,不表示字符的表面意义,而是能匹配符合指定特征的字符串。


* 任意长度的任意字符,可以为空。


? 任意单个字符,不能为空。


[] 匹配指定范围内的任意单个字符。

例如:

[a-z]

[A-Z]

[0-9]

[a-z0-9]

[:alpha:] 所有大小写字母

[:digit:] 所有数字

[:space:] 空白,包含空格和制表符等等。

[:lower:] 所有小写字母

[:upper:] 所有大写字母

[:alnmu:] 所有大小写字母和数字

[:punct:] 所有的标点符号

[:print:] 所有能打印显示出来的字符

[:blank:] 空格和制表符。


[^] 取反,指定范围之外的任意单个字符。

例如:

[^a-z]=[^[:lower:]] 表示除小写字符以外的任意单个字符。


REGular EXPeression (REGXP):正则表达式。

字符(元字符 PATTERN)体现通配的含义,而不是本身的含义。


Basic REGXP:基本正则表达式。

Extended REGXP:扩展正则表达式。



grep:Global Regular Experssion Printing.

全局搜索正则表达式。使用基本正则表达式。 

文本过滤工具,能够实现根据指定模式(PATTERN),逐行搜索文件内容,并将匹配到的行显示出来。


#grep [OPTION] ... 'PATTERN'  FILES

-v 反向取值,显示不匹配的内容。


--color=COLOR 将匹配项用某种颜色COLOR显示。默认不赋值则为auto,红色。


-i 做模式匹配的时候不区分字符 大小写。


-o 只显示匹配到的字符串本身。每一个串显示为一行。


-A NUM 显示匹配行后NUM行的内容。


-B NUM 显示匹配行前NUM行的内容。


-C NUM 显示匹配行前后NUM行的内容。上下文。


-E 使用扩展的正则表达式。


例如:

#grep 'cpu' /proc/cpuinfo 显示/proc/cpuinfo中包含cpu的条目。

#ifconfg |grep 'inte addr' |cut -d: -f2|cut -d ' ' -f1 显示ifconfig中网卡的ip地址。



egrep [OPTION] 'PATTERN' FLIES

扩展正则表达式




PATTERN(元字符):

文本字符和正则表达式的元字符组成的匹配条件。


基本正则表达式元字符:


字符匹配:

1.. 匹配任意单个字符。

例如:

# grep 'c.u' /proc/cpuinfo 匹配文件中包含c.u的内容。

cpu  cpu这个符合条件。


2.[] 匹配指定范围内的任意单个字符。

例如:

[a-z]

[A-Z]

[0-9]

[a-z0-9]


# grep 'c..u [a-z]' /proc/info 匹配文件中包含c..u 同时后边有小写字母的内容。


3.[^] 匹配指定范围外的任意单个字符


4..* 匹配任意长度的任意字符。

例如:

a.*b 匹配以a开头,以b结尾,中间任意长度任意字符。

5.文件名通配中常见的元字符。


[:alpha:] 所有大小写字母

[:digit:] 所有数字

[:space:] 空白,包含空格和制表符等等。

[:lower:] 所有小写字母

[:upper:] 所有大写字母

[:alnmu:] 所有大小写字母和数字

[:punct:] 所有的标点符号

[:print:] 所有能打印显示出来的字符

[:blank:] 空格和制表符


例如:

#grep  '[[:space:]][[:digit:]]$' /etc/inittab 匹配以数字结尾,数字前有空白字符的行。





次数匹配:

工作在贪婪模式下,能匹配多长匹配多长。整体内容可能不匹配,但是会匹配其中符合条件的部分内容。


1.* 次数匹配,匹配其前的字符0次,1次或者多次。

例如:

ab*c匹配abc abbc ac abdc,其中abdc不符合。


2.? 次数匹配,匹配其前的字符0次,1次。

例如:

ab?c 匹配ac abc adc 其中adc不匹配。


3.\{m,n\} 精确匹配,最少m次,最多n次。

\{m,\} 至少m次

\{0,n\} 至多n次

\{m\} 精确m次


例如:

a[a-z]\{0,2\}c 匹配aAc aaaac aaaac 其中都不匹配。


a.\{1,3\}b 匹配已a开头,b结尾,中间任意1-3个字符,最少1个字符,最多3个字符。


位置锚定

单词锚定

\< 或 \b 锚定词首。其后边的任意字符必须作为单词首部出现。


\> 或 \b 锚定词尾。其前边的任意字符必须作为单词尾部出现。


例如:

#grep '\<root\>' /etc/passwd 在/etc/passwd文件中匹配root这个单词。


#grep '\broot\b' /etc/passwd





行锚定

^ 行首锚定。此字符后边的任意内容必须出现在行首。


$ 行尾锚定。此字符前边的任意内容必须出现在行位。


^$ 空白行。



例如;

\<r..t 匹配root chroot rooter ,其中chroot不匹配。


r..t\> 匹配root chroot rooter ,其中rooter不匹配。


^r..t 匹配root chroot rooter ,其中chroot不匹配。


r..t$ 匹配root chroot rooter ,其中rooter不匹配。


root[[:pounct:]]\{0,1\}  匹配以root为结尾的行。


分组

\(PATTERN\) 分组字符:

例如:

x\(ab\)*y  匹配以ab成组出现的字符。


向后引用:

\(PATTERN\)\1 引用前面匹配到的内容。


\(PATTERN1\(PATTERN2\)\)\1\2 多括号之间匹配是依照从左至右的括号来匹配的。


\1 匹配PATTERN1

\2 匹配PATTERN2.


例如:

he love his lover.

she like her liker.

he love is liker.

she like her lover.


匹配前后单词相同的行,使用\(l..e\).*\1r匹配。着这样第1、2行是符合匹配的。


扩展的正则表达式元字符:

部分和基本正则表达式元字符相同。

字符匹配:

.

[]

[^]


次数匹配:

*

?

+ 匹配其前的字符至少1次,等同于\{0,1\}

{m,n} 至少m次,至多n次。


#ifconfig | egrep --color ‘\<([0-9]|[0-9][0-9]|1[0-9][0-9]|25[0-5])\>\.{3}\<([0-9]|[0-9][0-9]|1[0-9][0-9]|25[0-5])\>’


列出ifconfig命令中0-255的数字。


锚定:


或者:

PATTERN1|PATTERN2

例如:C|cat 匹配的是C或者是cat。


分组

(PATTERN1(PATTERN2))\1\2


egrep = grep -E