正则表达式grep的一些操作

前端之家收集整理的这篇文章主要介绍了正则表达式grep的一些操作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在我们进行编辑的时候,我们会用到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~]#greproot/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~]#grepf./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
THISISA"TEST"

[root@localhost~]#grep[[:lower:]]/tmp/test/b
aaabbbccc
abcabc
abcdefg
s
r
q
[root@localhost~]#grep[[:upper:]]/tmp/test/b
THISISA"TEST"
[root@localhost~]#grep[[:digit:]]/tmp/test/b
12312131231
[root@localhost~]#grep[[:punct:]]/tmp/test/b
THISISA"TEST"
[root@localhost~]#grep[[:space:]]/tmp/test/b
12312131231
THISISA"TEST"
[root@localhost~]#grep[1-3]/tmp/test/b
12312131231

次数匹配类:该类字符前面的一个字符可以出现的次数
*:其前面的字符可以出现任意次,即:0次,1次或多次;
\?:其前面的字符可有可无,即:0次或1次;
\+:其前面的字符至少出现一次;
\{m,n\}:其前面的字符至少出现m次,最多出现n次;
\{m\}:其前面的字符必须出现m次;
\{m,\}:其前面的字符至少出现m次;
\{,n\}:其前面的字符出现最多不超过n次;

注意:在正则表达式中,表示任意长度的任意字符:.*

[root@localhost~]#grep"cd*"/tmp/test/b
aaabbbccc
abcabc
abcdefg
[root@localhost~]#grep"a\?b"/tmp/test/b
aaabbbccc
abcabc
abcdefg
[root@localhost~]#grep"a\+b"/tmp/test/b
aaabbbccc
abcabc
abcdefg
[root@localhost~]#grep"a\{1,3\}b"/tmp/test/b
aaabbbccc
abcabc
abcdefg
[root@localhost~]#grep"a\{2\}b"/tmp/test/b
aaabbbccc
[root@localhost~]#grep"a\{2,\}b"/tmp/test/b
aaabbbccc
[root@localhost~]#grep"a\{,2\}b"/tmp/test/b
aaabbbccc
abcabc
abcdefg

位置锚定字符:
行锚定:
行首锚定:^
行尾锚定:$
字锚定:
字首锚定:\<或\b
字尾锚定:\>或\b

[root@localhost~]#grep"^a\{,2\}b"/tmp/test/b
abcabc
abcdefg
[root@localhost~]#grep"c$"/tmp/test/b
aaabbbccc
abcabc
[root@localhost~]#grep"\<T..S\>"/tmp/test/b
THISISA"TEST"

分组与前向引用字符:
\(\):将小括号中包含的内容作为一个不可分割的整体来处理;
\1,\2,\3...:前向引用
正则表达式处理引擎的内置变量,\1表示前面所出现的第一组小括号中括选的内容,\2表示前面所出现的第二组小括号中括选的内容;...

\(string1\(string2\)\):\1表示string1,\2表示string2;
\(string1\).*\(string2\):\1表示string1,\2表示string2;

[root@localhost~]#grep"\(root\).*\1"/etc/passwd
root:x:0:0:root:/root:/bin/bash

或者:
\|:将其左右的字符或字符串当做整体来对待;
"C\|cat" C cat

[root@localhost~]#grep"\(root\).*\1"/etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost~]#grep"root\|ex"/etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ex:x:1000:1000:ex:/home/ex:/bin/bash


扩展的正则表达式元字符:ERE(所有的元字符不用转义\符号,除了字首锚定和字尾锚定以外,其余的全部和上边一样。
字符匹配类:
.:可以匹配任意单个字符
[]:可以匹配任意指定范围内的单个字符;
[^]:可以匹配任意指定范围以外的单个字符;
下列所有的字符集都可以放置于[]之中用于匹配字符集范围内的单个字符;
[:lower:]:小写字母
[:upper:]:大写字母
[:alpha:]:大小写字母
[:digit:]:十进制数字
[:xdigit:]:十六进制数字
[:alnum:]:所有的十进制数字加上字母
[:punct:]:所有的标点符号
[:space:]:所有的空白字符
[a-z]:仅表示所有的小写字母
[A-Z]:仅表示的大写字母
[0-9]:仅表示所有的十进制数码

次数匹配类:该类字符前面的一个字符可以出现的次数
*:其前面的字符可以出现任意次,即:0次,1次或多次;
?:其前面的字符可有可无,即:0次或1次;
+:其前面的字符至少出现一次;
{m,n}:其前面的字符至少出现m次,最多出现n次;
{m}:其前面的字符必须出现m次;
{m,}:其前面的字符至少出现m次;
{,n}:其前面的字符出现最多不超过n次;

注意:在正则表达式中,表示任意长度的任意字符:.*

位置锚定字符:
行锚定:
行首锚定:^
行尾锚定:$
字锚定:
字首锚定:\<或\b
字尾锚定:\>或\b



分组与前向引用字符:
():将小括号中包含的内容作为一个不可分割的整体来处理;
\1,\3...:前向引用
正则表达式处理引擎的内置变量,1表示前面所出现的第一组小括号中括选的内容,2表示前面所出现的第二组小括号中括选的内容;...

(string1(string2)):1表示string1,2表示string2;
(string1).*(string2):1表示string1,2表示string2;

或者:
|:将其左右的字符或字符串当做整体来对待;
"C|cat" C cat


grep系:
grep:仅支持基本正则表达式元字符;
egrep:可以支持扩展正则表达式元字符;
fgrep:不支持任何形式的正则表达式元字符,将所有的字符当做没有任何特殊意义的普通文本字符;


常用选项:
-A num:同时显示被PATTREN匹配到的行及其后续num行;
-B num:同时显示被PATTREN匹配到的行及其前面num行;
-C num:同时显示被PATTREN匹配到的行及其前后num行;
--color[=when]:以高亮颜色显示被匹配到的内容;默认命令就有

[root@localhost~]#alias
aliascp='cp-i'
aliasegrep='egrep--color=auto'
aliasfgrep='fgrep--color=auto'
aliasgrep='grep--color=auto'
aliasl.='ls-d.*--color=auto'
aliasll='ls-l--color=auto'
aliasls='ls--color=auto'
aliasmv='mv-i'
aliasrm='rm-i'
aliaswhich='alias|/usr/bin/which--tty-only--read-alias--show-dot--show-tilde'

-c,--count:不输出被PATTREN匹配的行的内容,而是输出被PATTERN匹配到的行数;
-E:可以是grep命令支持扩展正则表达式元字符;相当于执行egrep命令
-F:相当于fgrep;
-e:指定多个PATTERN在一个命令行中生效;
-f:将从指定的文件中读取多个PATTERN用于一次搜索
-i:忽略文件中字符大小写
-o:仅显示被PATTERN匹配到的部分,关闭贪婪模式;
-q:安静模式;相当于 grep > /dev/null
-v:选择没有被PATTERN匹配到的行;


[root@localhost~]#grep-A1"123"/tmp/test/b
12312131231
THISISA"TEST"
[root@localhost~]#grep-B1"123"/tmp/test/b
q
12312131231
[root@localhost~]#grep-C1"123"/tmp/test/b
q
12312131231
THISISA"TEST"
[root@localhost~]#grep-c"ab"/tmp/test/b
3
[root@localhost~]#grep-e"ab"-e"ef"/tmp/test/b
aaabbbccc
abcabc
abcdefg
[root@localhost~]#grep-i"is"/tmp/test/b
THISISA"TEST"
[root@localhost~]#grep-o"IS"/tmp/test/b
IS
IS
[root@localhost~]#grep-q"IS"/tmp/test/b
[root@localhost~]#grep-v"IS"/tmp/test/b
aaabbbccc
abcabc
abcdefg
s
r
q
12312131231
原文链接:https://www.f2er.com/regex/357806.html

猜你在找的正则表达式相关文章