通用线程--sed 实例,第2部分( 三 )


这种方法虽然可能不太方便,但总是管用 。一个地址的多个命令
有时,可能要指定应用到一个地址的多个命令 。这在执行许多 "s///" 以变换源文件中的字和语法时特别方便 。要对一个地址执行多个命令,可在文件中输入 sed 命令,然后使用 "{ }" 字符将这些命令分组,如下所示:1,20{ s/[Ll]inux/GNU/Linux/g s/samba/Samba/g s/posix/POSIX/g }
上例将把三个替换命令应用到第 1 行到第 20 行(包括这两行) 。还可以使用规则表达式地址或者二者的组合:1,/^END/{ s/[Ll]inux/GNU/Linux/g s/samba/Samba/g s/posix/POSIX/g p }
该例将把 "{ }" 之间的所有命令应用到从第 1 行开始,到以字母 "END" 开始的行结束(如果在源文件中没发现 "END",则到文件结束)的所有行 。附加、插入和更改行
既然在单独的文件中编写 sed 脚本,我们可以利用附加、插入和更改行命令 。这些命令将在当前行之后插入一行,在当前行之前插入一行,或者替换模式空间中的当前行 。它们也可以用来将多行插入到输出 。插入行命令用法如下:i This line will be inserted before each line
如果不为该命令指定地址,那么它将应用到每一行,并产生如下的输出:This line will be inserted before each line line 1 here
This line will be inserted before each line line 2 here
This line will be inserted before each line line 3 here
This line will be inserted before each line line 4 here
如果要在当前行之前插入多行,可以通过在前一行之后附加一个反斜杠来添加附加行,如下所示:i insert this line and this one and this one and, uh, this one too.
附加命令的用法与之类似,但是它将把一行或多行插入到模式空间中的当前行之后 。其用法如下:a insert this line after each line. Thanks! :)
另一方面,“更改行”命令将实际替换模式空间中的当前行,其用法如下:c You"re history, original line! Muhahaha!
因为附加、插入和更改行命令需要在多行输入,所以将把它们输入到一个文本 sed 脚本中,然后通过使用 "-f" 选项告诉 sed 执行它们 。使用其它方法将命令传递给 sed 会出现问题 。【通用线程--sed 实例,第2部分】下一篇
在下一篇、也是本 sed 系列的最后一篇文章中,我将为您演示许多使用 sed 来完成不同类型任务的极佳实例 。我将不仅为您显示脚本做些什么,还显示为什么那样做 。完成之后,您将掌握更多有关如何在不同项目中使用 sed 的极佳知识 。到时候见!

推荐阅读