正则表达式|shell

本文详细介绍了正则表达式的基础和扩展用法,包括查找特定字符、集合字符、行首行尾匹配、任意字符与重复字符等。接着,深入讲解了文本处理器sed的工作流程和常见用法,如输出、删除、替换和迁移文本。此外,还提到了awk工具的用法,展示了按行和按字段输出文本的功能。通过对这些工具的学习,读者可以更好地理解和运用正则表达式进行文本处理。
摘要由CSDN通过智能技术生成

前言:正则表达式又称正规表达式、常规表达式。在代码中常简写为 regex、regexp 或 RE。正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,简单来说, 是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特定字符串。
正则表达式是由普通字符与元字符组成的文字模式。模式用于描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。其中普通字符包括大小写字母、数字、标点符号及一些其他符号,元字符则是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
正则表达式一般用于脚本编程与文本编辑器中。很多文本处理器与程序设计语言均支持正则表达式,如前面提到的 Perl、Linux 系统中常见的文本处理器(grep、egrep、sed、awk)。正则表达式具备很强大的文本匹配功能,能够在文本海洋中快速高效地处理文本。

正则表达式的字符串表达方法根据不同的严谨程度与功能分为基本正则表达式与扩展正则表达式。
在这里插入图片描述

基础正则表达式

在这里插入图片描述

示例:

下面的操作需要提前准备一个名为 test.txt 的测试文件,文件具体内容如下所示。
在这里插入图片描述

1)查找特定字符

查找特定字符非常简单,如执行以下命令即可从 test.txt 文件中查找出特定字符“the” 所在位置。其中“-n”表示显示行号、“-i”表示不区分大小写。命令执行后,符合匹配标准的字符,字体颜色会变为红色
在这里插入图片描述
若反向选择,如查找不包含“the”字符的行,则需要通过 grep 命令的“-vn”选项实现。
在这里插入图片描述

2)利用中括号“[]”来查找集合字符

想要查找“shirt”与“short”这两个字符串时,可以发现这两个字符串均包含“sh” 与“rt”。此时执行以下命令即可同时查找到“shirt”与“short”这两个字符串。“[]”中无论有几个字符,都仅代表一个字符,也就是说“[io]”表示匹配“i”或者“o”。
在这里插入图片描述
若要查找包含重复单个字符“oo”时,只需要执行以下命令即可。
在这里插入图片描述
若查找“oo”前面不是“w”的字符串,只需要通过集合字符的反向选择“[^]”来实现该目的,如执行“grep –n‘[^w]oo’test.txt”命令表示在 test.txt 文本中查找“oo” 前面不是“w”的字符串。
在这里插入图片描述
在上述命令的执行结果中发现“woood”与“wooooood”也符合匹配规则,二者均包含“w”。其实通过执行结果就可以看出,符合匹配标准的字符加粗显示,而上述结果中可以得知,“#woood #”中加粗显示的是“ooo”,而“oo”前面的“o”是符合匹配规则的。同理 “#woooooood #”也符合匹配规则。
若不希望“oo”前面存在小写字母,可以使用“grep –n‘[^a-z]oo’test.txt”命令实现,其中“a-z”表示小写字母,大写字母则通过“A-Z”表示。
在这里插入图片描述
查找包含数字的行可以通过“grep –n‘[0-9]’test.txt”命令来实现。
在这里插入图片描述

3)查找行首“^”与行尾字符“$”

基础正则表达式包含两个定位元字符:“^”(行首)与“$”(行尾)。在上面的示例中,查询“the”字符串时出现了很多包含“the”的行,如果想要查询以“the”字符串为行首的行,则可以通过“^”元字符来实现。
在这里插入图片描述
查询以小写字母开头的行可以通过“[a-z]”规则来过滤,查询大写字母开头的行则使用“[A-Z]”规则,若查询不以字母开头的行则使用“[a-zA-Z]”规则。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

“^”符号在元字符集合“[]”符号内外的作用是不一样的,在“[]”符号内表示反向选择,在“[]”符号外则代表定位行首。反之,若想查找以某一特定字符结尾的行则可以使用“$”定位符。例如,执行以下命令即可实现查询以小数点(.)结尾的行。因为小数点(.) 在正则表达式中也是一个元字符(后面会讲到),所以在这里需要用转义字符“\”将具有特 殊意义的字符转化成普通字符。
在这里插入图片描述

当查询空白行时,执行“grep –n‘^$’test.txt”命令即可。
在这里插入图片描述

4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值