linux命令行 正则,在Linux命令行中使用正则表达式

上一节我们介绍过grep命令在搜索文本信息时的基本用法,其实,grep命令还可以配合正则表达式执行更加复杂的搜索操作。

本节我们将对如何在Linux命令行中使用正则表达式进行介绍。

所谓正则表达式,就是利用一些特殊符号构成的表达式,来模糊匹配字符串。下面是一些可用的正则表达式符号:

符号

符号含义

.

匹配除了换行符以外的任意字符

^

匹配一行的开始位置

$

匹配一行的结束位置

*

匹配零次或多次前面的字符或表达式

\

对下一个字符进行转义,使其成为普通的字符,例如\^会将^转义,使其成为普通的^符号,而不再表示匹配一行的开始位置。

[]

中括号可以匹配括号内的任一字符,例如 [aeiou] 表示匹配a、e、i、o、u中的任意一个字符,如果要匹配范围的话,可以在中间加'-',例如:[0-9]表示匹配0到9的任一字符。

()

对正则表达式进行分组

|

在分组中可以匹配|左侧的部分,或者匹配|右侧的部分

?

前面的字符可以存在,也可以不存在,例如a?bc表示匹配abc或者bc

{n}

匹配n次前面的字符

{n,m}

匹配最少n次,最多m次前面的字符

{n,}

匹配最少n次前面的字符,可以超过n次

下面我们举例来说明,我们先创建一个sample文件,并在sample中写入以下内容:

[root@localhost pcre_test]# cat sample

apple

bat

ball

ant

eat

pant

people

taste

[root@localhost pcre_test]#

我们先用grep查找包含字母a的文本行:

[root@localhost pcre_test]# cat sample | grep a

apple

bat

ball

ant

eat

pant

taste

[root@localhost pcre_test]#

可以看到,除了people所在的行,其他的包含字母a的文本行都匹配到了。接下来,我们用正则表达式来查找只以字母a开头的文本行:

[root@localhost pcre_test]# cat sample | grep ^a

apple

ant

[root@localhost pcre_test]#

通过 ^a 正则表达式,就只显示了以字母a开头的文本行。

再比如,下面的例子,是利用正则表达式将以字母t结尾的文本行显示出来:

[root@localhost pcre_test]# cat sample | grep t$

bat

ant

eat

pant

[root@localhost pcre_test]#

我们再来看个比较复杂的例子,假设sample文件的内容如下:

[root@localhost pcre_test]# cat sample

+12345

1adfsf

-67890

sdfsefs

55555

[root@localhost pcre_test]#

如果我们想将+12345和-67890匹配出来,可以使用下面的命令:

[root@localhost pcre_test]# grep -E "^(\+|\-)[0-9]+" sample

+12345

-67890

[root@localhost pcre_test]#

上面使用-E选项,告诉grep后面是一个正则表达式,这里将sample文件名放在最后,grep会去直接读sample的文件内容,然后在文件内容中根据正则表达式进行查找。

这里的正则表达式"^(\+|\-)[0-9]+",表示以+号或-号开头的,后面跟随了一串数字的文本行。

我们再来看下{n},{n,m},以及{n,}这类正则表达式的用法:

[root@localhost pcre_test]# grep -E "5{3}" sample

55555

[root@localhost pcre_test]# grep -E "5{1,2}$" sample

+12345

55555

[root@localhost pcre_test]# grep -E "5{3,}" sample

55555

[root@localhost pcre_test]#

上面grep会将匹配到的文本进行标红,例如"5{3}"表示匹配3个连续的5,并对这3个5进行了标红处理。"5{1,2}$"表示匹配结尾包含1个或2个5的文本行。"5{3,}"表示匹配最少包含3个连续的5的文本行。

如果grep的-E选项后面的正则表达式没有用引号(单引号或双引号)扩起来的话,像'{','}'之类的特殊符号,就需要在前面加上'\',才会被当成正则表达式,例如:

[root@localhost pcre_test]# grep -E 5\{3,\} sample

55555

[root@localhost pcre_test]#

否则就会被当成文件,并报文件不存在的错误:

[root@localhost pcre_test]# grep -E 5{3,} sample

grep: 5: No such file or directory

[root@localhost pcre_test]#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值