这可以通过sed实现。如果所有的东西都在一条线上(如另一个答案所示),那就很简单:sed -n 's/^Checked out revision \([0-9]\+\) \(FAILED\|PASSED\) Unit Tests$/\1 \2/p'
如果你感兴趣的两个位在不同的行上,这就有点难了,但是如果你能认出一个或两个sed习惯用法,就很容易了:sed -n '/^Checked out revision \([0-9]\+\)/{s//\1/;h}; /^\(FAILED\|PASSED\) Unit Tests$/{s//\1/;H;g;s/\n/ /p}'
这需要一点解释:sed -n '/^Checked out revision \([0-9]\+\)$/{ # Match revision, capture number
s//\1/ # Make matched group (number) the only thing in pattern space
h # Save the pattern space (number) to hold space
}
/^\(FAILED\|PASSED\) Unit Tests$/{ # Match pass/fail line, capturing pass/fail
s//\1/ # Make pass/fail the only thing in pattern space
H # Append pattern space to hold space with newline
g # Fetch hold space to pattern space
s/\n/ / # Replace newline with space
p # Print out pattern space
}'