一、文本查找的需要:

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:其指定的字符必须作为单词出现

例:创建一个文件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

阅读(499) | 评论(0) | 转发(0) |

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐