在我们进行编辑的时候,我们会用到vim和nano这样的的全屏编辑器,这样的编辑器顾名思义会占据我们的屏幕,来进行编辑。当然,有全屏的编辑器,就有不是全屏的文本编辑器,叫做行编辑器,对于行编辑器来说,有行编辑器三剑客,grep系,sed,awk。
这篇主要就来写grep系的编辑器的一些操作。
greb系:grep,egrep,fgrep,文本搜索工具;基于PATTERN(模式)对于给定的文本文件进行模糊搜索,grep系所有命令默认工作于贪婪搜索模式;
grep系:
grep:Global search Regular Expression and Print out the line
利用正则表达式进行全局搜索并将匹配到的行显示出来
格式:
grep [options] PATTERN [FILE...]
grep [options] [-e PATTERN | -f FILE] [FILE...]
PATTERN:过滤匹配条件,是由没有特殊意义的文本字符或者是正则表达式元字符组成;
root作为PATTERN
[root@localhost ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
正则表达式的元字符:会被正则表达式处理引擎解释为特殊含义的字符;各自都有对应的含义,除非加上\进行转义,否则会以原来的含义进行转义解释。
所有的正则表达式都是由普通字符加上元字符构成的,
pcre:正则表达式处理引擎(处理器),用prel语言的正则表达式引擎(处理器);
正则表达式元字符:
基本的正则表达式元字符:BRE
字符匹配类:
.:可以匹配任意单个字符
[root@localhost ~]# cat /tmp/test/b
aaabbbccc
abcabc
abcdefg
[root@localhost ~]# grep f. /tmp/test/b
abcdefg
[root@localhost ~]# grep .f /tmp/test/b
abcdefg
[]:可以匹配任意指定范围内的单个字符;
[root@localhost ~]# grep [cd] /tmp/test/b
aaabbbccc
abcabc
abcdefg
[^]:可以匹配任意指定范围以外的单个字符;
[root@localhost ~]# grep [^d] /tmp/test/b
aaabbbccc
abcabc
abcdefg
下列所有的字符集都可以放置于[]之中用于匹配字符集范围内的单个字符;
[:lower:]:小写字母
[:upper:]:大写字母
[:alpha:]:大小写字母
[:digit:]:十进制数字
[:xdigit:]:十六进制数字
[:alnum:]:所有的十进制数字加上字母
[:punct:]:所有的标点符号
[:space:]:所有的空白字符
[a-z]:仅表示所有的小写字母
[A-Z]:仅表示的大写字母
[0-9]:仅表示所有的十进制数码
[root@localhost ~]# cat /tmp/test/b
aaabbbccc
abcabc
abcdefg
s
r
q
12312131231
THIS IS A "TEST"
[root@localhost ~]# grep [[:lower:]] /tmp/test/b
aaabbbccc
abcabc
abcdefg
s
r
q
[root@localhost ~]# grep [[:upper:]] /tmp/test/b
THIS IS A "TEST"
[root@localhost ~]# grep [[:digit:]] /tmp/test/b
12312131231
[root@localhost ~]# grep [[:punct:]] /tmp/test/b
THIS IS A "TEST"
[root@localhost ~]# grep [[:space:]] /tmp/test/b
12312131231
THIS IS A "TEST"
[root@localhost ~]# grep [1-3] /tmp/test/b
12312131231
次数匹配类:该类字符前面的一个字符可以出现的次数:
*:其前面的字符可以出现任意次,即:0次,1次或多次;
\?:其前面的字符可有可无,即:0次或1次;
\+:其前面的字符至少出现一次;
\{m,n\}:其前面的字符至少出现m次,最多出现n次;
\{m\}:其前面的字符必须出现m次;
\{m,\}:其前面的字符至少出现m次;
\{,n\}:其前面的字符出现最多不超过n次;
注意:在正则表达式中,表示任意长度的任意字符:.*