04-Shell 编程之正则表达式与文本处理器

对于一般计算机用户来说,由于使用到正则表达式的机会不多,所以无法体会正则表达 式的魅力,而对于系统管理员来说,正则表达式则是必备技能之一。 正则表达式对于系统管理员来说是非常重要的,系统运行过程中会产生大量的信息,这 些信息有些是非常重要的,有些则仅是告知的信息。身为系统管理员如果直接看这么多的信 息数据,无法快速定位到重要的信息,如"用户账号登录失败""服务启动失败"等信息。这时 可以通过正则表达式快速提取"有问题"的信息。如此一来,可以将运维工作变得更加简单、 方便

引言

在Shell编程中,正则表达式(Regular Expression,简称RE)和文本处理器是两项非常重要的工具。它们允许我们高效地处理和分析文本数据。本文档将基于您提供的材料文本,对Shell编程中的正则表达式和文本处理器grep进行详细的解析。

一、正则表达式概述

正则表达式是一种强大的文本处理工具,它使用特定的模式来描述字符序列的规则。通过定义这些规则,我们可以在文本中快速定位、查找、替换或删除符合特定模式的字符串。

在Shell编程中,正则表达式主要用于文本搜索和替换操作。常用的文本处理器如grep、sed、awk等都支持正则表达式。

二、grep命令详解

grep是一个强大的文本搜索工具,它使用正则表达式来搜索文本,并把匹配的行打印出来。以下是grep命令的一些常用选项和参数:

  • -a:不要忽略二进制数据。
  • -A<显示列数>:除了显示符合范本样式的那一行之外,并显示该行之后的内容。
  • -b:在显示符合范本样式的那一行之外,并显示该行之前的内容。
  • -c:计算符合范本样式的行数。
  • -C<显示列数>:除了显示符合范本样式的那一行之外,并显示该行之前后的内容。
  • -d<进行动作>:当指定要查找的是目录而非文件时,必须使用这项参数。
  • -e<范本样式>:指定字符串作为查找文件内容的范本样式。
  • -E:将范本样式为延伸的普通表示法来使用,即支持扩展正则表达式。
  • -f<范本文件>:指定范本文件,其内容有一个或多个范本样式。
  • -F:将范本样式视为固定字符串的列表。
  • -G:将范本样式视为普通的表示法来使用(默认)。
  • -h:在显示符合范本样式的那一行之前,不标示该行所属的文件名称。
  • -H:在显示符合范本样式的那一行之前,标示该行所属的文件名称(默认)。
  • -i:忽略字符大小写的差别。
  • -l:列出文件内容符合指定的范本样式的文件名称。
  • -L:列出文件内容不符合指定的范本样式的文件名称。
  • -n:在显示符合范本样式的那一行之前,标示出该行的编号。
  • -q:不显示任何信息,但可以通过返回值判断查找是否成功。
  • -R/-r:递归地在目录及其子目录中搜索。
  • -s:不显示错误信息。
  • -v:反转查找,即显示不包含指定模式的行。
  • -w:只显示全字符合的列。
  • -x:只显示全列符合的列。
  • -o:只输出文件中匹配到的部分。
三、示例操作

假设的文件内容 (example.txt):

复制代码

复制代码

|---|------------------|
| | apple123 |
| | banana |
| | orange456 |
| | 123grape |
| | watermelon789 |
| | woody100 |
| | xyzwoooood |
| | Hello World |

解析任务

  1. 查找包含数字的行。
  2. 查找以wo开头的单词。
  3. 查找不包含字母o的行。

解析结果

1. 查找包含数字的行

我们可以使用正则表达式中的[0-9]来匹配任意数字。因为grep默认就是查找包含指定模式的行,所以不需要额外的参数。

复制代码

bash复制代码

|---|----------------------------|
| | grep '[0-9]' example.txt |

输出结果:

复制代码

复制代码

|---|------------------|
| | apple123 |
| | orange456 |
| | 123grape |
| | watermelon789 |
| | woody100 |
| | xyzwoooood |

这些行都包含了至少一个数字。

2. 查找以wo开头的单词

这里我们可以使用正则表达式的单词边界符\b来确保匹配的是整个单词的开始,而不是单词中的部分子串。

复制代码

bash复制代码

|---|------------------------------|
| | grep -w '\bwo' example.txt |

但注意,上述命令实际上不会返回任何结果,因为文件中没有以wo开头的完整单词(如woody虽然包含wo但不是以它开头)。但如果我们有一个单词wood,它就会被匹配。

如果我们只是想找到包含wo的行(不考虑是否是单词的开始),我们可以简单地使用:

复制代码

bash复制代码

|---|-------------------------|
| | grep 'wo' example.txt |

输出结果:

复制代码

复制代码

|---|--------------|
| | orange456 |
| | woody100 |
| | xyzwoooood |

3. 查找不包含字母o的行

我们可以使用grep-v选项来反转匹配,即查找不匹配指定模式的行。

复制代码

bash复制代码

|---|---------------------------|
| | grep -v 'o' example.txt |

输出结果:

复制代码

复制代码

|---|---------------|
| | banana |
| | Hello World |

这两行都不包含字母

常见的元字符

sed工具:

1.读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓 冲区中(又称模式空间,pattern space)。

2.执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行 的地址,否则 sed 命令将会在所有的行上依次执行

3.显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。 在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完

sed 命令常见用用法

sed [选项] '操作' 参数

sed [选项] -f scriptfile 参数

1.-e 或--expression=:表示用指定命令或者脚本来处理输入的文本文件

2.-f 或--file=:表示用指定的脚本文件来处理输入的文本文件。

3.-h 或--help:显示帮助。

4.-n、--quiet 或 silent:表示仅显示处理后的结果

5.-i:直接编辑文本文件

3.awk 工具

四、总结

正则表达式和grep命令是Shell编程中不可或缺的工具。通过掌握它们的使用方法和技巧,我们可以更加高效地进行文本处理和分析。希望本文档能够为您提供有用的参考和帮助。

相关推荐
西洼工作室6 小时前
【java 正则表达式 笔记】
java·笔记·正则表达式
kiss strong1 天前
正则表达式
正则表达式
Linux运维技术栈1 天前
Python字符串及正则表达式(十一):正则表达式、使用re模块实现正则表达式操作
开发语言·python·正则表达式
jackiendsc1 天前
Java中正则表达式的介绍、使用场景及示例代码
java·开发语言·正则表达式
taller_20001 天前
VBA之正则表达式(48)-- 快速拆分中文语句
正则表达式·正则·拆分中文·中文拆分·中文标点
梧桐树04291 天前
python:正则表达式
数据库·python·正则表达式
葡萄架子1 天前
Python中的正则表达式
python·mysql·正则表达式
Oneforlove_twoforjob2 天前
【Java】正则表达式基础题+场景题练习
正则表达式
产幻少年2 天前
正则表达式
正则表达式
Spcarrydoinb2 天前
正则表达式
笔记·学习·正则表达式·脚本语言