上一节我们介绍过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]#

linux命令行 正则,在Linux命令行中使用正则表达式相关推荐

  1. java中正则匹配字符串长度_Java中使用正则表达式校验字符串

    Java中使用正则表达式校验字符串 正则表达式是某一位伟大的数学家发明的,现在已经形成了一个ISO标准,这个标准和编程语言没有关系.至于具体谁发明的,怎么发明的,我也忘记了:). 正则表达式简单理解就 ...

  2. Java正则匹配美元表达式_Java中的正则表达式“ $”(美元)元字符

    子表达式/元字符" $ "与行尾匹配. 例子1import java.util.regex.Matcher; import java.util.regex.Pattern; pub ...

  3. 正则数字和小数点_Python中的正则表达式【不断补充~】

    首先,力推一个正则表达式效果测试网站,简洁好用,就是它了~ PHP, PCRE, Python, Golang and JavaScript​regex101.com 然后,贴一张正则表达式的常用符号 ...

  4. php用正则匹配远程图片,php中通过正则表达式下载内容中的远程图片的函数代码...

    if (preg_match_all("/http://[^ "']+[.jpg|.gif|.jpeg|.png]+/ui",stripcslashes($content ...

  5. java正则和python正则差距,在C/Java中处理正则表达式比在Python中快多少?

    这可能更多地依赖于单个实现而不是语言.在 例如,某些模式在某些实现中是O(N2),而在其他实现中则是~O(N).具体地说,大多数重新实现都是基于NFAs(非确定性有限状态自动机)的.长话短说,这意味着 ...

  6. linux命令行 正则,Linux shell基础(四)正则表达式与grep命令 beta

    一.正则表达式 之前学习find命令时,就已经接触过一些简单的正则,那么我们现在来学习一些复杂的正则.首先,我们还是来复习什么是正则表达式,看这个教程先,一定要多看几遍,至少知道正则大概长什么样子.( ...

  7. linux如何正则匹配删除一行,shell sed命令匹配替换删除最后第一行字符正则表

    只显示每行的第一个单词 [root@localhost ~]# sed -r 's/([^0-9a-Z]+)(.+)//gp' passwd root bin daemon adm 打印每行3次:se ...

  8. linux命令大写输入,在Linux命令行内的大小写转换

    在编辑文本时大小写常常是需要注意的地方,大小写的转换是很枯燥而繁琐的工作,所幸,Linux 提供了很多能让这份工作变得容易的命令.接下来让我们看看都有哪些完成大小写转换的命令. #### `tr` 命 ...

  9. Linux命令行–更多bash shell命令(转)

    4.1.1 探查程序 ps 命令 默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户进程的进程 显示的当前进程的项目 进程号 运行在哪个终端(tty) 进程占用的CPU时间 Linux系统支 ...

最新文章

  1. 如何卸载sql2008,完全清除
  2. mysql count if语句_COUNT分组条件去重的sql统计语句示例(mysql)
  3. Dynamic Data Web Application编译是报GetActionPath调用模糊解决办法
  4. JavaWeb从开发环境搭建,到第一个servlet程序(图文)
  5. [HDU5739]Fantasia(圆方树DP)
  6. webgame php源码,最WEB游戏源码服务端(完整修改版).doc
  7. 非线性优化问题---MATLAB
  8. 如何快速入门RTOS
  9. 史莱姆区块查找 超简单java代码
  10. LabVIEW Arduino无线蓝牙遥控智能车(项目篇—2)
  11. Ext js 下拉框模糊匹配查询,并支持反复输入检索
  12. 题解 luoguP3513 【[POI2011]KON-Conspiracy】
  13. 给mongodb设置密码
  14. 电力系统暂态分析复习
  15. video监听上次播放时间点下次进入后继续播放
  16. 2020.2.2版idea的file mask 为空解决办法
  17. (C语言)八大排序之:希尔排序
  18. Kubios HRV心率变异性分析软件
  19. 《高效15法则》读书笔记
  20. 从“在快餐店吃饭”到Command模式(一)

热门文章

  1. 全国大学生智能汽车竞赛证书打印方法
  2. 串口ISPHUB制作
  3. mysql数据库支持的锁粒度包括_1. Mysql的并发(锁策略、锁粒度、事务)
  4. 苏教版四下用计算机计算,苏教版四年级下册数学单元测试-4.用计算器计算 (含答案)...
  5. linux5.5内核,一条命令就可以升级到Linux 5.5内核或Linux 5.5以上版本
  6. 安装testlink时mysql_windows下安装testlink
  7. 恩智浦智能车大赛2020_2020年中国人工智能机器人大赛在宝鸡市会展中心举办
  8. rbac 一个用户对应多个账号_电商后台系统:管理后台之账号管理(一)
  9. mysql server_id作用_在MySQL中设置`server-id`变量不起作用
  10. 有计算机二级证书当兵有好处吗,大学生拿到这个证书可享受的福利,当兵有什么不一样?...