如前所述,sed 默认的会将每一个编辑命令(editing command)应用到每个输入行。而现在我们要告诉你的是:还可以限制一条命令要应用到哪些行,只要在命令前置一个地址(address)即可。因此,sed 命令的完整形式是:
address command
行编号
可以使用绝对的行编号作为地址。稍后将有介绍。
范围
可指定行的范围,仅需将地址以逗号隔开:
sed -n '10,42p' foo.xml 仅打印10~42行
sed '/foo/,/bar/ s/baz/quux/g' 仅替换范围内的行
第二个命令为“从含有 foo 的行开始,再匹配是否有 bar 的行再将匹配后的结果中,有 baz 的全部换成 quux ”。
这种以逗点隔开两个两个正则表达式的方式称为范围表达式(range expression)。在 sed 里,总是需要使用至少两行才能表达。
否定正则表达式
有时,将命令应用于不匹配与特定模式的每一行,也是很有用的。通过将 ! 加在正则表达式后面就能做到,如下所示:
/used/ !s/new/used/g 将没有 used 的每个行里所有的 new 改成 used