一、文本查找的需要:
grep,egrep,fgrep
1、grep:根据模式搜索文本,并将符合模式的文本行显示出来
Pattern(模式):文本字符和正则表达式的元字符组合而成匹配条件
grep [options] PATTERN [FILE...]
例:[root@Ourlab ~]# grep 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
-i:忽略大小写
--colour:匹配的字符或字符串加颜色
例:[root@Ourlab ~]# grep --colour 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
-v:显示没有被匹配的行
-o:只显示被匹配的字符串,且以行显示
例:[root@Ourlab ~]# grep -o 'root' /etc/passwd
root
root
root
root
2、通配符:
*:任意长度的任意字符
?:任意单个字符
[]:任意范围内的字符
[^]:任意范围外字符
3、正则表达式:Regular EXPression(REGEXP)
元字符:
.:匹配任意单个字符
例:[root@Ourlab ~]# grep 'r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
字符集合:[:digit:]数字,[:lower:]小写字母,[:upper:]大写字母,[:punct:]标点符号,[:space:]空格,[:alpha:]所有字母,[:alnum:]所有字母和数字
例:显示/etc/inittab中以数字结尾的行
[root@Ourlab ~]# grep '[[:digit:]]$' /etc/inittab
# 5 - X11
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
字符次数:
*:匹配其前面的字符任意次
例:创建一个文件test.txt,内容为:a,b,ab,aab,acb,adb,amnb,amnbmnb,使用“a*b”进行匹配显示的字符如下:
[root@Ourlab ~]# grep 'a*b' test.txt
b
ab
aab
acb
adb
amnb
amnbmnb
.*:匹配任意长度的任意字符
例:[root@Ourlab ~]# grep 'a.*b' test.txt
ab
aab
acb
adb
amnb
amnbmnb
\?:匹配其前面的字符1次或0次(使用时需要加转义符\)
例:[root@Ourlab ~]# grep 'a\?b' test.txt
b
ab
aab
acb
adb
amnb
amnbmnb
\{m,n\}:匹配其前面的字符至少m次,至多n次
例:[root@Ourlab ~]# grep 'a\{1,3\}b' test.txt
ab
aab
位置锚定:
^:锚钉行首,此字符后面的任意内容必须出现在行首
例:[root@Ourlab ~]# grep '^r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
$:锚钉行尾,此字符前面的任意内容必须出现在行尾
例:[root@Ourlab ~]# grep 'w$' /etc/inittab
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
^$:空白行
例:[root@Ourlab ~]# grep '^$' /etc/inittab
\<或\b:锚钉词首,其后面的任意字符必须作为单词的首部出现
\>或\b:锚钉词尾,其前面的任意字符必须做为单词的尾部出现
\<\>或\b\b:其指定的字符必须作为单词出现
例:创建一个文件test2.txt,内容:This is root.The user is mroot.rooter is a dog's name.chroot is a command.mrooter is not a word.
例1:[root@Ourlab ~]# grep "root\>" test2.txt
This is root.
The user is mroot.
chroot is a command.
分组:
\(\):用于后向引用
例:\(ab\)*:ab作为一组同时出现或不出现
[root@Ourlab ~]# grep --colour "\(ab\)" test.txt
ab
aab
\1:引用第一个左括号以及与之对应的右括号所包含的所有内容
\2:引用第二个左括号以及与之对应的右括号所包含的所有内容
例:创建一个文件test3.txt文件内容如下:
He love his lover.
She like her lover.
He like his liker.
She love her liker.
She like him.
例1:使用后引用方法查找test3.txt文件相关出现”l..e“单词并以该单词结尾的行;
[root@Ourlab ~]# grep '\(l..e\).*\1' test3.txt
He love his lover.
He like his liker.
课后练习:
1、分析/etc/inittab文件中如下文本中前两行的特征(每一行中出现在数字必须相同),请写出可以精确找到类似两行的模式:
l1:1:wait:/etc/rc.d/rc 1
l3:3:wait:/etc/rc.d/rc 3
[root@Ourlab ~]# grep '^l\([0-9]\):\1.*\1$' /etc/inittab
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
阅读(1038) | 评论(0) | 转发(0) |