sed进阶教程

寻址规则

常规寻址

  • 如果没有指定地址,那么命令将应用于每一行。
  • 如果只有一个地址,那么命令应用于与这个地址匹配的任意行。
  • 如果指定了由逗号分隔的两个地址,那么命令应用于匹配第一个地址(不包括第一个地址)到匹配第二个地址的行(包括此行)。
  • 如果地址后面跟有感叹号(!),那么命令就应用于不匹配该地址的所有的行。

举例

ed中使用寻址扩大受命令影响的行数;sed使用寻址限制受命令影响的行数。

测试文本:list

John Daggett, 341 King Road, Plymouth MA
Alice Ford, 22 East Broadway, Richmond VA
Orville Thomas, 11345 Oak Bridge Road, Tulsa OK
Terry Kalkas, 402 Lans Road, Beaver Falls PA
Eric Adams, 20 Post Road, Sudbury MA
Hubert Sims, 328A Brook Road, Roanoke VA
Amy Wilde, 334 Bayshore Pkwy, Mountain View CA
Sal Carpenter, 73 6th Street, Boston MA
View Code

删除所有行

d

删除首行

1d

删除尾行

$d

删除空行

/^$/d

删除了从第一行直到第一个空行的所有的行,可用它来删除保存在文件中的Internet邮件消息中的邮件头。

1,/^$/d

嵌套寻址

sed使用大括号{}将一个地址嵌套在另一个地址中,或者在相同的地址上应用多个命令。

举例

/ˆ.TS/,/ˆ.TE/{
    /ˆ$/d
    s/ˆ.ps 10/.ps 8/
    s/ˆ.vs 12/.vs 10/
}
View Code

书写要求

左大括号必须在行末

右大括号本身必须单独占一行

确保在大括号之后没有空格。

注释

在sed的System V版本中,注释只允许出现在第一行。而有的版本,则可以在脚本的任何地方放置注释,甚至是跟在命令行的后面。

注释以#开头

如果是#n,那么脚本不会自动产生输出。这和指定命令行选项-n是等价的。跟在n后面的其余的内容被看做是注释。在POSIX标准中,采用这种方式的#n必须是文件的前两个字符。

如果注释内容太多,一行输入不完,则使用反斜杠 来续行,但是“新行”必须以#开头

原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/10079540.html