跳转到内容

Ict-innovation/LPI/103.7

来自维基教科书,开放的世界,开放的书籍

103.7 使用正则表达式

[编辑 | 编辑源代码]

候选人应该能够使用正则表达式操作文件和文本数据。本目标包括创建包含多个符号元素的简单正则表达式。它还包括使用正则表达式工具在文件系统或文件内容中执行搜索。


关键知识领域

  • 创建包含多个符号元素的简单正则表达式。
  • 使用正则表达式工具在文件系统或文件内容中执行搜索。


使用grepfgrepegrep来查找文本中的一个或多个单词。搜索期间使用的关键词是称为正则表达式的字母组合。许多其他应用程序(例如sedvi)也识别正则表达式。

正则表达式

传统正则表达式(regex)

正则表达式是用于匹配模式的一系列字符(或原子)。字符可以是常量(按字面意义处理)或元字符。

表 1:主要元字符
字符
搜索匹配
\<KEY 以‘KEY’开头的单词
WORD\> 以‘WORD’结尾的单词
^ 一行的开头
$ 一行的结尾
[ 范围 ] 包含的 ASCII 字符范围
[^c ] 不是字符‘c’
\[ 按字面意义解释字符‘[’
“ca*t” 包含‘c’后跟零个或多个字母‘a’再后跟‘t’的字符串
“.” 匹配任何单个字符


扩展正则表达式:

主要的 eregex 为:+、?、() 和 |

表 2:主要 eregex 列表
字符
搜索匹配
"A1|A2|A3" 包含‘A1’或‘A2’或‘A3’的字符串
"ca+t" 包含‘ca’后跟任意数量的字母‘a’再后跟‘t’的字符串
"ca?t" 包含‘c’后跟零个或一个字母‘a’再后跟‘t’的字符串

grep 家族

[编辑 | 编辑源代码]

grep 实用程序支持正则表达式regex,例如表 1中列出的那些。

使用基本 grep

grep 的语法

grep PATTERN FILE

grep 的选项包括

grep
主要选项
-c 计算与 PATTERN 匹配的行数
-f 从文件获取 PATTERN
-i 忽略大小写敏感
-n 包含匹配行的行号
-v 输出所有不包含 PATTERN 的行
-w 仅当模式匹配整个单词时选择行。


例如,列出 /etc/lilo.conf 中所有非空行

$ grep –v “^$” /etc/lilo.conf


egrep

egrep 工具支持扩展正则表达式eregex,例如表 2中列出的那些。

egrep 实用程序将处理任何现代正则表达式。如果在命令行输入多个关键词,并用竖线字符分隔,它也可以搜索它们。

例如

$ egrep 'linux|^image' /etc/lilo.conf


fgrep

fgrep 代表快速 grep,fgrep 按字面意思解释字符串(不支持 regex 或 eregex)。fgrep 实用程序不识别正则表达式的特殊含义。

例如

$ fgrep 'cat*' FILE

将只匹配包含‘cat*’的单词。主要改进来自fgrep从文件中逐行输入的关键词列表(例如 LIST)中搜索的能力。语法将是

$ fgrep –f LIST FILE


流编辑器 - sed

sed 对文件执行自动的、非交互式的编辑。它通常用于脚本中以搜索和替换文本中的模式。它支持大多数正则表达式。

sed 的语法

sed [options] 'command' [INPUTFILE]

输入文件是可选的,因为sed也适用于文件重定向和管道。以下是一些示例,假设我们正在操作一个名为 MODIF 的文件。

删除所有注释行

$ sed '/^#/ d ' MODIF

请注意,搜索模式位于两个斜杠之间。

将 /dev/hda1 替换为 /dev/sdb3

$ sed 's/\/dev\/hda1/\/dev\/sdb3/g' MODIF

命令中的s代表“替换”。g代表“全局”,并强制替换在每一行中都发生。您也可以指定替换应该发生的哪一行,可以使用行号或正则表达式匹配。

如果行包含关键词 KEY,则将‘:’替换为‘;’(全局)

$ sed '/KEY/ s/:/;/g' MODIF


更高级的 sed

您可以发出多个命令,每个命令都以–e开头,在命令行输入。例如,(1)删除所有空行,然后(2)将MODIF文件中的‘OLD’替换为‘NEW’

$ sed –e '/^$/ d’ -e ‘s/OLD/NEW/g' MODIF

这些命令也可以写入文件(例如 COMMANDS)。然后,每一行都解释为要执行的新命令(不需要引号)。

COMMANDS 文件示例
1 s/old/new/
/keyword/ s/old/new/g
23,25 d

使用COMMANDS文件的语法是

sed -f COMMANDS MODIF

这比很长的命令行更紧凑!

sed 选项总结
命令行标志
-e 执行以下命令
-f 从文件读取命令
-n 不打印未编辑的行
sed 命令
d 删除整行
r 读取文件并追加到输出
s 替换
w 将输出写入文件



使用的文件、术语和实用程序

  • grep
  • egrep
  • fgrep
  • sed
  • regex(7)


上一章 | 下一章

华夏公益教科书