下面是使用 sed 从输出流除去 /etc/services 文件第一行的示例:
$ sed -e "1d" /etc/services | more如您所见,除了前面有 "1" 之外,该命令与第一个 "d" 命令十分类似 。如果您猜到 "1" 指的是第一行,那您就猜对了 。与第一个示例中只使用 "d" 不同的是,这一次使用的 "d" 前面有一个可选的数字地址 。通过使用地址,可以告诉 sed 只对某一或某些特定行进行编辑 。地址范围
现在,让我们看一下如何指定地址范围 。在本例中,sed 将删除输出的第 1 到 10 行:
$ sed -e "1,10d" /etc/services | more当用逗号将两个地址分开时,sed 将把后面的命令应用到从第一个地址开始、到第二个地址结束的范围 。在本例中,将 "d" 命令应用到第 1 到 10 行(包括这两行) 。所有其它行都被忽略 。带规则表达式的地址
现在演示一个更有用的示例 。假设要查看 /etc/services 文件的内容,但是对查看其中包括的注释部分不感兴趣 。如您所知,可以通过以 "#" 字符开头的行在 /etc/services 文件中放置注释 。为了避免注释,我们希望 sed 删除以 "#" 开始的行 。以下是具体做法:
$ sed -e "/^#/d" /etc/services | more试一下该例,看看发生了什么 。您将注意到,sed 成功完成了预期任务 。现在,让我们分析发生的情况 。要理解 "/^#/d" 命令,首先需要对其剖析 。首先,让我们除去 "d" -- 这是我们前面所使用的同一个删除行命令 。新增加的是 "/^#/" 部分,它是一种新的规则表达式地址 。规则表达式地址总是由斜杠括起 。它们指定一种 模式,紧跟在规则表达式地址之后的命令将仅适用于正好与该特定模式匹配的行 。因此,"/^#/" 是一个规则表达式 。但是,它做些什么呢?很明显,现在该复习规则表达式了 。规则表达式复习
可以使用规则表达式来表示可能会在文本中发现的模式 。您在 shell 命令行中用过 "*" 字符吗?这种用法与规则表达式类似,但并不相同 。下面是可以在规则表达式中使用的特殊字符:字符 描述
与行首匹配
与行末尾匹配
与任一个字符匹配
将与前一个字符的零或多个出现匹配
[ ] 与 [ ] 之内的所有字符匹配感受规则表达式的最好方法可能是看几个示例 。所有这些示例都将被 sed 作为合法地址接受,这些地址出现在命令的左边 。下面是几个示例:规则
表达式 描述
/./ 将与包含至少一个字符的任何行匹配
/../ 将与包含至少两个字符的任何行匹配
/^#/ 将与以 "#" 开始的任何行匹配
/^$/ 将与所有空行匹配
/}^/ 将与以 "}"(无空格)结束的任何行匹配
/} *^/ 将与以 "}" 后面跟有零或多个空格结束的任何行匹配
/[abc]/ 将与包含小写 "a"、"b" 或 "c" 的任何行匹配
/^[abc]/ 将与以 "a"、"b" 或 "c"开始的任何行匹配在这些示例中,鼓励您尝试几个 。花一些时间熟悉规则表达式,然后尝试几个自己创建的规则表达式 。可以如下使用 regexp:
$ sed -e "/regexp/d" /path/to/my/test/file | more这将导致 sed 删除任何匹配的行 。然而,通过告诉 sed打印 regexp 匹配并删除不匹配的内容,而不是与之相反的方法,会更有利于熟悉规则表达式 。可以用以下命令这样做:
$ sed -n -e "/regexp/p" /path/to/my/test/file | more请注意新的 "-n" 选项,该选项告诉 sed 除非明确要求打印模式空间,否则不这样做 。您还会注意到,我们用 "p" 命令替换了 "d" 命令,如您所猜想的那样,这明确要求 sed 打印模式空间 。就这样,将只打印匹配部分 。有关地址的更多内容
目前为止,我们已经看到了行地址、行范围地址和 regexp 地址 。但是,还有更多的可能 。我们可以指定两个用逗号分开的规则表达式,sed 将与所有从匹配第一个规则表达式的第一行开始,到匹配第二个规则表达式的行结束(包括该行)的所有行匹配 。例如,以下命令将打印从包含 "BEGIN" 的行开始,并且以包含 "END" 的行结束的文本块:
推荐阅读
- 通用线程--sed 实例,第2部分
- FreeBSD下设置modem和modem的通用命令
- 什么叫多线程
- 和彩云支持普通用户上传多大文件
- 缝好衣服后怎么用短线快速打结?男女通用
- 医保是全国通用的吗
- 5e和steam皮肤通用吗
- 下 Solaris 10通用桌面CDE快速入门
- 中 Solaris 10通用桌面CDE快速入门
- 4 Solaris 8 新增功能一览--通用磁盘格式 (UDF) 文件系统