Chinaunix

标题: sed如何匹配多条件(与、或) [打印本页]

作者: kickeagle    时间: 2009-08-01 22:31
标题: sed如何匹配多条件(与、或)
如某日志文件如下
Jul  3 xxx fail xxxxxx
Sep  9 xxx error
Sep 10 xxx
Sep 10 yyy fail
我想匹配日期为Sep  9或Sep 10,并且包含error或fail的行,应该如何写?

我用awk很容易实现
awk '/^(Sep  9|Sep 10).*(error|fail)/' testfile
想学学sed怎么写
作者: yatusiter    时间: 2009-08-02 23:56
sed -e "/^Sep \( 9\|10\).*\(error\|fail\)$/p" FILENAME

"|" "(" ")" 等属于正则表达式的POSIX扩展, 在sed里不直接支持 需要加转义字符"\" 。
也就是说得这样使用:  \|    \(    \)

可以直接用两个 -e “” 来表示或者。。。
作者: kickeagle    时间: 2009-08-05 21:38
原帖由 yatusiter 于 2009-8-2 23:56 发表
sed -e "/^Sep \( 9\|10\).*\(error\|fail\)$/p" FILENAME

"|" "(" ")" 等属于正则表达式的POSIX扩展, 在sed里不直接支持 需要加转义字符"\" 。
也就是说得这样使用:  \|    \(    \)

可以直接用两个  ...


多谢,但是好像有问题
测试文件test如下
Sep  9 xxxxx0 fail
Jul  8 xxxxx1
Sep  9 xxxxx2 error
Sep 10 xxxxx3

执行sed -e "/^Sep \( 9\|10\).*\(error\|fail\)$/p" test
第2行也输出了
作者: 零二年的夏天    时间: 2009-08-05 21:49
missing -n






欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2