5.2. 在脚本中应用命令

未匹配的标注

5.2 在脚本中应用命令

在脚本中结合一系列的编辑,可能会有意想不到的结果。你可能不会想到一个编辑的结果能作用于另一个。新用户通常认为 sed 在应用下一条编辑命令之前,会将一个编辑命令应用于输入的所有行。但事实恰好相反,在读取输入的第二行并应用编辑脚本之前,sed 将整个脚本应用于输入的第一行。因为 sed 总是作用于原始行的最新版本,进行的任何编辑都会更改后续命令要影响的行。 sed 不保留原始内容,这意味着在进行一个编辑后,一个可能匹配原始输入行的模式可能不再匹配编辑后的行。

让我们看一个使用替代命令的例子。假设有人迅速地写了下面的脚本,将 “pig” 更改为 “cow” 然后 “cow” 变为 “horse”:

s/pig/cow/g
s/cow/horse/g

你认为会发生什么?在一个样本文件上试一下。

➜  ch04 git:(daily) ✗ cat sample1
Pig is big
Cow is bigger
Horse is biggest

➜  ch04 git:(daily) ✗ cat script1
s/pig/cow/ig
s/cow/horse/ig

➜  ch04 git:(daily) ✗ sed -f script1 sample1
horse is big
horse is bigger
Horse is biggest

可以看到所有动物单词都变成了 horse,但我们的原意是想最后留下的是“cow”和“horse“。

我们将在学习 sed 如何工作后讨论发生了什么。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~