正则表达式
1.正则表达式的定义
正则表达式又称正规表达式、常规表达式。在代码中常简写为regex、regexp或RE。正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,是一种匹配字符串的方法,通过特殊符号实现快速查找、删除、替换某个特定字符串。
2.正则表达式的用途
正则表达式对于系统管理员来说是非常重要的,系统运行过程中会产生大量的信息,这 些信息有些是非常重要的,有些则仅是告知的信息。
基础正则表达式
- 基 础 正 则 表 达 式 示 例
( 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 中具有特殊意义,所以在 使用""字符时,需要利用转义字符"",将"("字符转换成普通字符。
- 元字符总结
扩展正则表达式
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)按行输出文本
(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: 先删除第一字符集较第二字符集多出的字符。