【发布时间】:2017-02-26 01:58:03
【问题描述】:
我有以下一组需要通过 sed 处理的字符串:
start-pattern
[SYSTEM] capture ............................... FAIL [ 2.825 s]
[SYSTEM] capture ............................... FAIL [ 2.825 s]
[DEBUG] capture :: capture :: capture .......... FAIL [ 0.866 s]
[DEBUG] capture :: me :: capture capture capture FAIL [ 0.876 s]
[DEBUG] capture-me ............................. FAIL [ 0.361 s]
end-pattern
我想写一个 sed 表达式(如果可能的话最好使用 sed)来获取[DEBUG] || 之间的所有字符串[SYSTEM] 和 FAIL [.*] 用于失败的测试用例的每一行,不包括空格 和句点 . 以及文本 {start,end}-pattern 之间的 AND。
上述文本的输出应为以下一项或多项:
capture
capture
capture::capture::capture
capture::me::capture capture capture
capture-me
这是我尝试过的,但不适用于所有行:
sed -e 's/\[DEBUG\] \(.*\) :: \(.*\) :: \(.*\) \([^.]FAIL \[.*\]) \[.*/\1::\2::\3::\4/' -e 's/\[SYSTEM\] \(.*\) \..*/\1/'
【问题讨论】:
-
对问题做了一个小修改,我需要处理开始和结束模式之间的所有行
-
start-pattern和end-pattern看起来怎么样?它们的实际值是多少? -
抱歉!这些是确切的关键字而不是模式
-
它们的名字是否准确地称为
start-pattern和end-pattern,字面意思是? -
你不能接受 Perl-one-liner 吗?很短很简单