g[oe]lf
句点
现在假设您有第三种体育运动 gilf,您也希望对其进行检查 。使用您到目前为止已学到的知识,一种方法是在您的搜索条件中使用 o、e 和 i 。但是随着您的搜索的逐步发展,您可能希望查找以 g 开头、以 lf 结尾并且其间具有一个字符的所有字符串 。为此,您可以使用另一个特殊字符,即句点 (.) 。
g.lf
这将查找以 g 开头和以 lf 结尾并且其间具有一个字符的所有字符串 。若要将您的搜索扩展到以 g 开头和以 f 结尾并且其间具有两个字符的所有字符串,您可以使用两个句点:
g..f
使用 grep 来搜索文件
现在您已经对正则表达式背后的概念有了基本的了解,您可以开始使用实际的示例,以便能够看到它们的实际运用 。您将试验的第一个命令行应用程序是 grep 。grep 的名称实际上就来自于正则表达式:g/RE/p 。grep 用于在一个或多个文件中搜索特定字符串的实例 。缺省情况下,grep 输出其中出现了您的搜索字符串的每一行(而不是仅输出搜索字符串) 。如果您在多个文件中执行搜索,则 grep 还会输出在其中找到该行的文件名 。
使用以下文本创建一个名为 grep.txt 的文件:
I like golf.
Golf is played on grass.
I created gilf.
【UNIX 新手指南,第 3 部分:正则表达式】grep 的基本语法如下:
grep REGULAREXPRESSION FILENAME(S)
基本搜索
现在,返回到前面的第一个正则表达式示例:单独的单词 golf 。若要与 grep 一起使用这个表达式,可输入:
grep golf grep.txt
此命令在 grep.txt 文件中搜索字符串 golf 的所有实例,并输出包含该字符串的行 。您的输出应该类似如下:
I like golf.
使用方括号
下一步,试验一些上面讨论过的特殊字符 。您可以使用方括号(方括号表达式)来指示您想要搜索 golf 和 Golf:
grep [gG]olf grep.txt
输出应该类似如下:
I like golf.
Golf is played on grass.
句点
若要搜索 golf 和 gilf,您同样可以使用方括号 。取而代之的是,可以尝试使用一个句点来指示您想要搜索 g 和 lf 之间的任何字符:
$grep g.lf grep.txt
输出应该类似如下:
I like golf.
I created gilf.
搜索 golf、Golf 和 gilf
您现在已经找到了获得每种 golf 变体的方法,但是还没有哪个搜索返回了所有三个实例:golf、Golf 和 gilf 。花点时间考虑一下如何搜索所有三个实例 。这可以通过多种方法来实现 。下面是两个示例:
grep ..lf grep.txt
grep [gG][oi]lf grep.txt
这两种方法都返回所有三行:
I like golf.
Golf is played on grass.
I created gilf.
短横线
您是否能够想出更多的方法来完成此任务呢?到目前为止,您仅学习了两个在正则表达式中使用的特殊字符 。这只是开始!有些特殊字符在其他特殊字符之内使用 。例如,当您将一组字符包括在方括号中时,您可以使用短横线 (-) 来搜索一系列字符 。将以下行添加到您的文本文件:
What is g2lf?
使用您到目前为止已学到的知识,您知道如果使用类似于 g.lf 或 g[oi2]lf 的正则表达式,则这一行将包括在搜索结果中 。使用句点将返回在该位置具有任何字符的结果;使用 [oi2] 将返回仅在该位置具有 o i 或 2 的结果 。通过使用一个短横线,您可以实现第三种方法,其中不只包括少数字符,但并不是包括每个字符:
grep g[a-z]lf
此方法产生以下输出:
I like golf.
I created gilf.
从输出中可以看到,此方法搜索落在 a 和 z 之间的任何字符(按字母顺序) 。这排除了在 g 和 lf 之间具有数字或符号的字符串,这些字符串不是真正的单词,可能不属于您所需的搜索条件 。
推荐阅读
- UNIX 新手指南,第 2 部分: vi 文本编辑器
- UNIX 新手指南: 一些很好的 Shell 诀窍
- 使用 UNIX System V IPC 机制共享应用程序数据
- iphone11id设置
- 和大6小3的第一次接触
- 利用 UNIX 脚本来管理 DS4000 磁盘阵列系统
- 对话 UNIX,第 13 部分: 另外十种命令行组合
- UNIX 生产力技巧
- UNIX 新手指南,第 1 部分: 文件维护工具
- 使用 UNIX find 命令的高级技术
