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

正则表达式

1.正则表达式的定义

正则表达式又称正规表达式、常规表达式。在代码中常简写为regex、regexp或RE。正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,是一种匹配字符串的方法,通过特殊符号实现快速查找、删除、替换某个特定字符串。

2.正则表达式的用途

正则表达式对于系统管理员来说是非常重要的,系统运行过程中会产生大量的信息,这 些信息有些是非常重要的,有些则仅是告知的信息。

基础正则表达式

  1. 基 础 正 则 表 达 式 示 例

( 1 ) 查 找 特 定 字 符

查找特定字符非常简单,如执行以下命令即可从test.txt 文件中查找出特定字符"the "所 在位置。其中"-n" 表示显示行号、"-i"表示不区分大小写。

( 2 ) 利 用 中 括 号"D" 来查找集合字符

想要查找"shirt"与"short"这两个字符串时,可以发现这两个字符串均包含"sh"与"t"。此 时执行以下命令即可同时查找到"shirt" 与"short" 这两个字符串,其中"["中无论有几个字符,都仅代表一个字符,也就是说"[io]"表示匹配""或者"0"。

(3)查找行首"A"与行尾字符"$"

基础正则表达式包含两个定位元字符: "A"(行首)与"$"(行尾)。在上面的示例中, 查询"the"字符串时出现了很多包含"the"的行,如果想要查询以"the"字符串为行首的行,则可以通过"A"元字符来实现。

(4)查找任意一个字符". "与重复字符"*"

前面提到,在正则表达式中小数点(.)也是一个元字符,代表任意一个字符。例如执行以下命令就可以查找"w??d" 的字符串,即共有四个字符,以w 开 头d 结尾。

(5)查找连续字符范围""

查找三到五个o 的连续字符,这个时候就需 要使用基础正则表达式中的限定范围的字符"{}"。因为"{}"在 Shell 中具有特殊意义,所以在 使用""字符时,需要利用转义字符"",将"("字符转换成普通字符。

  1. 元字符总结

扩展正则表达式

grep 命令仅支持基础正则表达式,如果使用扩展正则表达式,需要使用 egrep 或 awk 命令。awk 命令在后面的小节进行讲解,这里我们直接使用egrep 命 令 。egrep 命 令与 grep 命令的用法基本相似。 egrep 命令是一个搜索文件获得模式,使用该命令可以搜 索文件中的任意字符串和符号,也可以搜索一个或多个文件的字符串, 一个提示符可以是单个字符、 一个字符串、 一个字或一个句子。

文本处理器

在 Linux/UNIX 系统中包含很多种类的文本处理器或文本编辑器,其中包括我们之前学习过 的VIM 编辑器与grep 等。而 grep,sed,awk 更是 Shell 编程中经常用到的文本处理工具,被称之为 Shell 编程三剑客。

sed 工具

sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据 指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输 出处理的某些行。sed 也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于Shell 脚本中,用以完成各种自动化处理任务。

sed 的工作流程主要包括读取、执行和显示三个过程。

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

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

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

1.sed 命令常见用法

常见的 sed 命令选项主要包含以下几种。

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

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

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

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

-i: 直接编辑文本文件。

a: 增加,在当前行下面增加一行指定内容。

c: 替换,将选定行替换为指定内容。

d: 删除,删除选定的行。

i: 插入,在选定行上面插入一行指定内容。

p: 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII 码输出。其通常与"-n"选项一起使用。

s: 替换,替换指定字符。

y: 字符转换。

( 2 ) 删 除 符 合 条 件 的 文 本 (d)

(3)替换符合条件的文本

(4)迁移符合条件的文本

在使用 sed 命令迁移符合条件的文本时,常用到以下参数.

H:复制到剪贴板;

g 、G: 将剪贴板中的数据覆盖/追加至指定行;

w: 保存为文件;

r: 读取指定文件;

a: 追加指定内容。

(5)使用脚本编辑文件

(6)sed 直接操作文件示例

awk 工 具

1.awk 常见用法前面提到sed 命令常用于一整行的处理,而 awk 比较倾向于将一行分成多个"字段"然后 再进行处理,且默认情况下字段的分隔符为空格或 tab 键 。awk 执行结果可以通过 print 的 功能将字段数据打印显示。在使用 awk 命令的过程中,可以使用逻辑操作符"&&"表示"与"、"I!" 表示"或"、"!"表示"非";还可以进行简单的数学运算,如+、 -、*、1、%、^分别表示加、减、乘、除、取余和乘方。

awk 包含几个特殊的内建变量(可直接用)如下所示:

FS: 指定每行文本的字段分隔符,默认为空格或制表位。

NF: 当前处理的行的字段个数。

NR: 当前处理的行的行号(序数)。

$0: 当前处理的行的整行内容。

$n: 当前处理行的第n 个 字 段 ( 第n 列 ) 。

FILENAME: 被处理的文件名。

RS: 数据记录分隔,默认为\n, 即每行为一条记录。

  1. 用 法 示 例

(1)按行输出文本

(2)按字段输出文本

(3)通过管道、双引号调用 Shell 命令

sort 工具

sort 是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序。例如数据和字符的排序就不一样。 sort 命令的语法为"sort [选项]参数",其中常用的选项包括以下几种。

-f: 忽略大小写;

-b: 忽略每行前面的空格;

-M: 按照月份进行排序;

-n: 按照数字进行排序;

-r: 反向排序;

-u: 等同于uniq, 表示相同的数据仅显示一行;

-t: 指定分隔符,默认使用[Tab]键分隔;

  • 0 :将排序后的结果转存至指定文件;

-k: 指定排序区域。

uniq

工具Uniq工具在 Linux系统中通常与 sort 命令结合使用,用于报告或者忽略文件中的重复行。具体的命令语法格式为: uniq[选项]参数。其中常用选项包括以下几种。

-c: 进行计数;

-d: 仅显示重复行;

-u: 仅显示出现一次的行。

tr 工具

tr 命令常用来对来自标准输入的字符进行替换、压缩和删除。可以将一组字符替换之后变成另一组字符,经常用来编写优美的单行命令,作用很强大。

tr 具体的命令语法格式为:

-C: 取代所有不属于第一字符集的字符;

-d: 删除所有属于第一字符集的字符;

-s: 把连续重复的字符以单独一个字符表示;

-t: 先删除第一字符集较第二字符集多出的字符。

相关推荐
Majoy28 分钟前
HBase
大数据·数据库·hbase
夜光小兔纸1 小时前
oracle查询出表中某几个字段值不唯一的数据
数据库·sql·oracle
原机小子1 小时前
探索Vim的窗口艺术:窗口拆分功能全解析
linux·编辑器·vim
deadknight93 小时前
Oracle密码过期处理方式
数据库·oracle
Ljubim.te3 小时前
数据库第01讲章节测验(选项顺序可能不同)
数据库
吱吱喔喔3 小时前
数据分表和分库原理
数据库·分表·分库
快乐非自愿3 小时前
KES数据库实践指南:探索KES数据库的事务隔离级别
数据库·oracle
一只fish3 小时前
Oracle的RECYCLEBIN回收站:轻松恢复误删对象
数据库·oracle
weixin_440401693 小时前
分布式锁——基于Redis分布式锁
java·数据库·spring boot·redis·分布式
TOR-NADO3 小时前
数据库概念题总结
数据库·oracle