文件名通配(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