为了搞定oracle备份中版本保留的问题,不得以看这些东西。感觉为了抓一个小蚂蚁,找了个挖土机来挖蚁窝!
http://www-900.ibm.com/developerWorks/cn/linux/shell/sed/sed-1/index.shtml
郁闷,这些都白写了!
字符 | 描述 |
与行首匹配 | |
与行末尾匹配 | |
与任一个字符匹配 | |
将与前一个字符的零或多个出现匹配 | |
[ ] | 与 [ ] 之内的所有字符匹配 |
感受规则表达式的最好方法可能是看几个示例。所有这些示例都将被 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 打印模式空间。就这样,将只打印匹配部分。
# sed -e '/^$/d' 9
george noNEWLINE georges
george noNEWLINE georges
# sed -e '/^$;G' 9
sed: 0602-404 Function /^$;G cannot be parsed.
# sed -e '/^$/d;G' 9
george noNEWLINE georges
george noNEWLINE georges
# sed -e '/[g]/d' 9
# sed -e '/regexp/p' 9
george noNEWLINE georges
george noNEWLINE georges
# sed -e '/regexp/p' 9|more
george noNEWLINE georges
george noNEWLINE georges
# sed -n -e '/^$/d' 9
# sed -n -e '/^$/p' 9
#
指定两个用逗号分开的规则表达式,sed 将与所有从匹配第一个规则表达式的第一行开始,到匹配第二个规则表达式的行结束(包括该行)的所有行匹配。例如,以下命令将打印从包含 "BEGIN" 的行开始,并且以包含 "END" 的行结束的文本块:
$ sed -n -e '/BEGIN/,/END/p' /my/test/file | more |
如果没发现 "BEGIN",那么将不打印数据。如果发现了 "BEGIN",但是在这之后的所有行中都没发现 "END",那么将打印所有后续行。发生这种情况是因为 sed 面向流的特性 -- 它不知道是否会出现 "END"。