一、GREP

GREP:Global search regular expression(RE),是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
GREP语法格式:
grep -[acinv] ‘word’ Filename
GREP参数详解:
-a :以文本文件方式搜索;
-c :计算找到的符合行的次数;
-i :忽略大小写;
-n:顺便输出行号;
-v:反向选择,即显示不包含匹配文本的所有行;
-h:查询多文件时不显示文件名;
-l :查询多文件时只输出包含匹配字符的文件名;
-s:不显示不存在或无匹配文本的错误信息;
-E:允许使用egrep扩展模式匹配;
-r:递归搜索;
-o: 匹配搜索的字符串。

二、正则表达式

正则表达式:处理字符串的方法,它是以行为单位来进行字符串处理的行为,正则表达式透过一些特殊字符的辅助,可以让使用者轻易达到搜索、删除、替换某特定字串的处理程序。
正则表达式分为基础正则表达式及扩展正则表达式,如下将介绍用法:

1、基础正则表达式

#################常用符号#################
.     表示任意单个字符。
*     表示前面的字符连续出现任意次,包括0次。
.*    表示任意长度的任意字符,与通配符中的*的意思相同。
\     表示转义符,当与正则表达式中的符号结合时表示符号本身。
[  ]  表示匹配指定范围内的任意单个字符。
[^  ] 表示匹配指定范围外的任意单个字符。

#################单个字符匹配#################
[[:alpha:]][a-zA-Z]     表示任意大小写字母。
[[:lower:]][a-z]        表示任意小写字母。
[[:upper:]][A-Z]        表示任意大写字母。
[[:digit:]][0-9]        表示0到9之间的任意单个数字(包括0和9)。
[[:alnum:]][a-zA-Z0-9]  表示任意数字或字母。
[[:space:]]               表示任意空白字符,包括"空格""tab键"等。
[[:punct:]]               表示任意标点符号。
[^[:alpha:]][^a-zA-Z]   表示单个非字母字符。
[^[:lower:]][^a-z]      表示单个非小写字母字符。
[^[:upper:]][^A-Z]      表示单个非大写字母字符。
[^[:digit:]][^0-9]      表示单个非数字字符。
[^[:alnum:]][^a-zA-Z0-9]表示单个非数字非字母字符。
[^[:space:]]              表示单个非空白字符。
[^[:punct:]]              表示单个非标点符号字符。
#简短格式并非所有正则表达式解析器都可以识别。
\d   表示任意单个0到9的数字。
\D   表示任意单个非数字字符。
\t   表示匹配单个横向制表符(相当于一个tab键)。
\s   表示匹配单个空白字符,包括"空格""tab制表符"等。
\S   表示匹配单个非空白字符。
 
#################次数匹配#################
\?       表示匹配其前面的字符0或1次
\+       表示匹配其前面的字符至少1次,或者连续多次,连续次数上不封顶。
\{n\}    表示前面的字符连续出现n次,将会被匹配到。
\{x,y\}  表示之前的字符至少连续出现x次,最多连续出现y次,都能被匹配到,换句话说,只要之前的字符连续出现的次数在x与y之间,即可被匹配到。
\{,n\}   表示之前的字符连续出现至多n次,最少0次,都会陪匹配到。
\{n,\}   表示之前的字符连续出现至少n次,才会被匹配到。

#################位置边界匹配#################
^:       表示锚定行首,此字符后面的任意内容必须出现在行首,才能匹配。
$:       表示锚定行尾,此字符前面的任意内容必须出现在行尾,才能匹配。
^$:      表示匹配空行,这里所描述的空行表示"回车",而"空格""tab"等都不能算作空行。
^abc$:   表示abc独占一行时,会被匹配到。
\<或者\b :匹配单词边界,表示锚定词首,其后面的字符必须作为单词首部出现。
\>或者\b :匹配单词边界,表示锚定词尾,其前面的字符必须作为单词尾部出现。
\B:      匹配非单词边界,与\b正好相反。
 
#################分组与后向引用#################
\( \)     表示分组,我们可以将其中的内容当做一个整体,分组可以嵌套。
\(ab\)    表示将ab当做一个整体去处理。
\1        表示引用整个表达式中第1个分组中的正则匹配到的结果。
\2        表示引用整个表达式中第2个分组中的正则匹配到的结果。

2、扩展正则表达式

#################常用符号#################
.     表示任意一个字符。
*     表示前面的字符连续出现任意次,包括0次。
.*    表示任意长度的任意字符,与通配符中的*的意思相同。
\     表示转义符,当与正则表达式中的符号结合时表示符号本身。
|     表示“或者”的意思,基础正则表达式不支持。
[  ]  表示匹配指定范围内的任意单个字符。
[^  ] 表示匹配指定范围外的任意单个字符。
 
#################单个字符匹配#################
此处基础正则表达式表示方法一致。

#################次数匹配####################
?     表示匹配其前面的字符0或1次
+     表示匹配其前面的字符至少1次,或者连续多次,连续次数上不封顶。
{n}   表示前面的字符连续出现n次,将会被匹配到。
{x,y} 表示之前的字符至少连续出现x次,最多连续出现y次,都能被匹配到,换句话说,只要之前的字符连续出现的次数在x与y之间,即可被匹配到。
{,n}  表示之前的字符连续出现至多n次,最少0次,都会陪匹配到。
{n,}  表示之前的字符连续出现至少n次,才会被匹配到。
 
#################位置边界匹配####################
^:       表示锚定行首,此字符后面的任意内容必须出现在行首,才能匹配。
$:       表示锚定行尾,此字符前面的任意内容必须出现在行尾,才能匹配。
^$:      表示匹配空行,这里所描述的空行表示"回车",而"空格""tab"等都不能算作此处所描述的空行。
^abc$:   表示abc独占一行时,会被匹配到。
\<或者\b :匹配单词边界,表示锚定词首,其后面的字符必须作为单词首部出现。
\>或者\b :匹配单词边界,表示锚定词尾,其前面的字符必须作为单词尾部出现。
\B:      匹配非单词边界,与\b正好相反。
 
####################分组与后向引用####################
( )     表示分组,我们可以将其中的内容当做一个整体,分组可以嵌套。
(ab)    表示将ab当做一个整体去处理。
\1      表示引用整个表达式中第1个分组中的正则匹配到的结果。
\2      表示引用整个表达式中第2个分组中的正则匹配到的结果。

三、grep与正则表达式结合应用举例

准备一个测试文件regular_expression.txt,内容如下:
gooooooood
good
gud
goooood
gxyzxyzxyzd
hello world! this is a beautiful world
123456789
abc123
abc

ABCD
,.;'":
1、匹配g和d之间有一个字符的行;
grep g.d regular_expression.txt
在这里插入图片描述
2、匹配模式go*d的行;在这里插入图片描述
3、匹配g和d之间包含任意字符串的行
在这里插入图片描述
4、过滤包含字符串abc或ABC的行
在这里插入图片描述
5、过滤a和c之间包含字符串“abcdefg”中一个字符的行。
在这里插入图片描述
6、过滤a和c之间不包含字符串“xyz”中任意一个字符的行。
在这里插入图片描述
7、分别过滤文件中包含字母、数字、空格、字母或数字、大写字母、小写字母、标点符号的行
在这里插入图片描述
8、过滤文件中不包含标点符号的行。
在这里插入图片描述
9、次数匹配(基础正则与扩展正则对比)
在这里插入图片描述
在这里插入图片描述
10、位置匹配
1)过滤以字符串abc开头的行
在这里插入图片描述
2)过滤以789结尾的行
在这里插入图片描述
3)过滤空行
在这里插入图片描述
4)过滤包含以w开头以d结尾的词的行
在这里插入图片描述
11、分组与后向引用
1)过滤g和d之间包含模式‘xyz’的行
在这里插入图片描述
2、过滤出机器的ip地址
在这里插入图片描述
3、使用后向引用将日期反向显示(年-月-日转换显示为日-月-年)
在这里插入图片描述
12、grep其他常用选项举例
-i :忽略大小写;
-v:反向选择,即显示不包含匹配文本的所有行;
-r:递归搜索,使用grep -nr ‘关键字’ /data/to/path可以递归搜索出目录下所有包含关键字的文件名,所在行数,即改行的内容,非常常用。
-o: 匹配搜索的字符串
-a :以文本文件方式搜索;
-c :计算找到的符合行的次数;
在这里插入图片描述

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐