grep ^golf grep.txt
输出应该类似如下:
golf has been a fine example
若要测试行尾定位点,请使用同一个搜索,但是删除脱字符并在 golf 之后添加一个美元符号 。
grep golf$ grep.txt
使用行尾定位点的输出类似如下:
let's talk about something besides golf
小结
现在您已经通过在命令行上使用 grep 来学习了正则表达式的基础知识 。下一步,您将学习使用 sed,此实用程序不仅搜索文本,而且还对搜索结果进行替换 。首先,下面是对您到目前为止已学习过的内容的小结:
.句点表示任何单个字符
[] 方括号包括一个字符序列
-短横线在字符之间使用以创建一个序列(在 [] 内)
^脱字符用于对序列(在 [] 内)取反
*星号搜索某个搜索项的零个、一个或多个实例
?问号搜索某个搜索项的零个或一个实例
加号搜索某个搜索项的一个或多个实例
$美元符号搜索行尾
^脱字符搜索行首
特殊字符前的反斜杠使该字符成为普通字符(请参见下一部分 。)
使用 sed 来编辑文件
sed 是流编辑器 (stream editor) 的简写 。文本编辑器的传统、现代定义是可用于创建和编辑文本文件的交互式应用程序 。sed 也是一个文本编辑器,但它是一个命令行实用程序而不是交互式实用程序,从而使之成为一个极其强大的批处理编辑工具 。sed 通常在 Unix Shell 脚本中用于过滤较大的文本文件集 。在本教程的第一部分中,您使用了一个讨论 golf 的小型测试文件 。为了演示 sed 编辑器的高级功能,您将使用一个很小的代码片段,开发人员可能希望在批处理过程中更改该代码片段 。
请将以下文本复制并粘贴到一个名为 sed.txt 的文件中:
system "echo 'project:$project' >> logfile";
system "echo 'version:$version' >> logfile";
system "echo 'optionalid:$optionalid' >> logfile";
system "echo 'nodes:$nodes' >> logfile";
system "echo 'threads:$threads' >> logfile";
正斜杠
前面解释过的用于 grep 的所有特殊字符在 sed 中也有效 。然而,若要使用 sed,您必须了解一些附加语法 。sed 中的基本表达式由四个部分组成,各个部分之间用正斜杠 (/) 分隔 。以下是用于基本 sed 命令的常见语法:
sed s/REGULAREXPRESSION/REPLACEMENTSTRING/flags INPUT_FILE
s——搜索和替换
s 指示您希望执行搜索和替换 。正斜杠用于绑定 sed 中的正则表达式 。例如,如果您只希望将词条 logfile 替换为 logfile.txt,则可以运行以下命令:
sed s/logfile/logfile.txt/ sed.txt
输出应该类似如下:
system "echo 'project:$project' >> logfile.txt";
system "echo 'version:$version' >> logfile.txt";
system "echo 'optionalid:$optionalid' >> logfile.txt";
system "echo 'nodes:$nodes' >> logfile.txt";
system "echo 'threads:$threads' >> logfile.txt";
在此情况下要注意的一个要点在于,sed 不会实际更改 sed.txt 的内容 。相反,它将输出发送到标准输出设备 。对于这些示例,您将把输出发送到标准输出设备,以便能够立即看到操作结果 。
为便于将来参考,可以捕获输出或将其发送到某个新文件 。例如,若要将输出发送到 sed_new.txt,可以运行以下命令:
sed s/logfile/logfile.txt/ sed.txt > sed_new.txt
反斜杠
在学习使用斜杠的同时,还有另一个非常重要的特殊字符需要学习 。反斜杠 () 称为转义字符,因为它对正则表达式解释中的下一个字符进行转义 。更简单的是,将一个反斜杠放在特殊字符前,将使该字符成为普通项而不是命令项 。这非常重要,因为许多文件(尤其是在编写代码的时候)广泛利用了与用于执行正则表达式的字符相同的字符 。在您的 sed.txt 文件中,您会注意到美元符号的使用 。如果您希望替换 $project 而不替换 project,则需要在搜索和替换中使用转义字符:
推荐阅读
- UNIX 新手指南,第 2 部分: vi 文本编辑器
- UNIX 新手指南: 一些很好的 Shell 诀窍
- 使用 UNIX System V IPC 机制共享应用程序数据
- iphone11id设置
- 和大6小3的第一次接触
- 利用 UNIX 脚本来管理 DS4000 磁盘阵列系统
- 对话 UNIX,第 13 部分: 另外十种命令行组合
- UNIX 生产力技巧
- UNIX 新手指南,第 1 部分: 文件维护工具
- 使用 UNIX find 命令的高级技术