目录
正则表达式
概述
- 正则表达式又称正规表达式、常规表达式。在代码中常简写为 regex、regexp 或 RE。
- 简单来说,是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特定字符串。
- 正则表达式是由普通字符与元字符组成的文字模式。模式用于描述在搜索文本时要匹配的一个或多个字符串。
基础正则表达式
查找特定字符
其中 “ -n ” 表示显示行号,“ -i ” 表示不区分大小写
若反向查找,可以使用 grep 命令的 “ -v ” 选项实现,配合 “ -n ” 一起使用显示行号
利用中括号 “ [] ” 来查找集合字符
想要査找"shirt"与"short"这两个字符串时,可以发现这两个字符串均包含"sh"与"rt”。此时执行以下命令即可同时查找到"shirt"与"short"这两个字符串
若要查找包含重复单个字符 “oo” 时,只需要执行以下命令即可
若查找“00"前面不是“w"的字符串,只需要通过集合字符的反向选择 “[^]" 来实现该目的例如执行 “grep -n'[^w]joo'test.txt”" 命令表示在 test.txt 文本中查找“00”前面不是"w"的字符串。
查找行首 “ ^ ” 与行尾字符 “ $ ”
基础正则表达式包含两个定位元字符 : “ ^ ” (行首) 与 “ $ ” (行尾)
查询以小写字母开头的行可以通过“^[a-z]"规则来过滤,查询大写字母开头的行则使用“^[A-Z]”规则,若查询不以字母开头的行则使用“^[^a-zA-Z]”规则。
查找任意一个字符 “ . ” 与重复字符 “ * ”
以下命令就可以查找“w??d”的字符串,即共有四个字符,以 w开头 d结尾。
查询以w开头d结尾,中间包含至少一个0的字符串,执行以下命令即可实现。
执行以下命令即可查询以w开头d结尾,中间的字符可有可无的字符串。
执行以下命令即可查询任意数字所在行
查找连续字符范围 “ {} ”
1. 查询两个o的字符。
2. 查询以w开头以d结尾,中间包含2~5个o的字符串。
3. 查询以w开头以d结尾,中间包含2个或2个以上o的字符串。
元字符总结
元字符 |
作用 |
^ | 匹配输入字符串的开始位置。除非在方括号表达式中使用,表示不包含该字符集合。要匹配 "^” 字符本身,请使用 “ \^ ” |
$ | 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 “$” 也匹配 'n' 或 'r' 。要匹配 “$” 字符本身,请使用 “$” |
. | 匹配除 "\r\n" 之外的任何单个字符 |
\ | 反斜杠,又叫转义字符,去除其后紧跟的元字符或通配符的特殊意义 |
* | 匹配前面的子表达式零次或多次。要匹配 “*” 字符,请使用 “\*” |
[] | 字符集合。匹配所包含的任意一个字符。例如,“[abc]" 可以匹配“plain" 中的 “ a ” |
[^] | 赋值字符集合。匹配未包含的一个任意字符。例如,“[^abc]" 可以匹配 "plain" 中任何一个字母 |
[n1-n2] | 字符范围。匹配指定范围内的任意一个字符。例如, “[a-z]" 可以匹配“a" 到 "z" 范围内的任意一个小写字母字符。 注意:只有连字符 ( - ) 在字符组内部,并且出现在两个字符之间时,才能表示字符的范围:如果出现在字符组的开头,则只能表示连字符本身 |
{n} | n 是一个非负整数,匹配确定的 n 次。例如,“o{2,}" 不能匹配 “Bob" 中的 "o”,但是能匹配 "food" 中的 “oo” |
{n,} | n 是一个非负整数,至少匹配 n 次。例如,“o{2,}" 不能匹配 “Bob" 中的 “o”,但能匹配 “foooood" 中的所有 0。“o{1,}" 等价于 “o+”。“o{0,}”则等价于 “o*” |
{n,m} | m 和 n 均为非负整数,其中 n<=m,最少匹配 n 次且最多匹配 m 次 |
文本处理器
grep,sed,awk 更是 Shell 编程中经常用到的文本处理工具,被称之为 Shell 编程三剑客。
sed 工具
- sed (Stream EDitor) 是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑 (删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。sed 也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于 Shell 脚本中,用以完成各种自动化处理任务。
- sed 的工作流程主要包括读取、执行和显示三个过程。
- 读取:sed 从输入流 (文件、管道、标准输入) 中读取一行内容并存储到临时的缓冲区中 (又称模式空间,pattern space)。
- 执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行。
- 显示:发送修改后的内容到输出流。在发送数据后,式空间将会被清空。
- sed 的工作流程主要包括读取、执行和显示三个过程。
1. sed 命令常见用法
通常情况下调用 sed 命令有两种格式。"参数”是指操作的目标文件,当存在多个操作对象时用,文件之间用逗号“,"分隔; 而 scriptfile 表示脚本文件,需要用 “-f” 选项指定,当脚本文件出现在目标文件之前时,表示通过指定的脚本文件来处理输入的目标文件。
- 常见的 sed 命令选项主要包含以下几种。
- -e 或 --expression=:表示用指定命令或者脚本来处理输入的文本文件。
- -f 或 --file=:表示用指定的脚本文件来处理输入的文本文件。
- -h 或--help:显示帮助。
- -n、--quiet 或 silent:表示仅显示处理后的结果。
- -i:直接编辑文本文件。
awk 工具
awk 是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互的情况下实现相当复杂的文本操作,被广泛应用于 Shel 脚本,完成各种自动化配置任务。
1. awk 常见用法
通常情况下 awk 所使用的命令格式如下所示,其中,单引号加上大括号“”用于设置对数据进行的处理动作。awk 可以直接处理目标文件,也可以通过 “ -f " 读取脚本对目标文件进行处理。
- awk 包含几个特殊的内建变量(可直接用)
- FS:指定每行文本的字段分隔符,默认为空格或制表位。
- NF:当前处理的行的字段个数。
- NR:当前处理的行的行号(序数)。
- $0:当前处理的行的整行内容。
- $n:当前处理行的第n个字段 ( 第 n 列 )
- FILENAME:被处理的文件名。
sort 工具
在 Linux 系统中,常用的文件排序工具有三种:sort、unig、wc 。本章将介绍前两种工具的用法。
sort 是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序。例如数据和字符的排序就不一样。
- sort 命令的语法为 "sort [选项] 参数”,其中常用的选项包括以下几种。
- -f:忽略大小写;
- -b:忽略每行前面的空格;
- -M:按照月份进行排序;
- -n:按照数字进行排序:
- -r:反向排序;
- -u:等同于 unig,表示相同的数据仅显示一行;
- -t:指定分隔符,默认使用 [Tab] 键分隔;
- -o <输出文件>:将排序后的结果转存至指定文件;
- -k:指定排序区域。