用于多行输出的正则表达式 - sed / awk / grep

时间:2017-10-26 20:19:41

标签: regex svn awk sed grep

SVN日志返回以下信息,但我试图根据评论获取修订号。

由于返回的值是多行的,有没有办法使用正则表达式查找'1712'(在最后一行),然后只返回相应的修订号r1055457(从第一行)?

r1055457 | test | 2017-10-26 12:02:33 -0700  (26 Oct 2010) | 3 lines
Changed paths:
M /search/config/legal.json
M /search/server/server.js
[1712]- test commmends

我尝试了几个命令,但它只返回了具有正则表达式的所有内容。

svn -v log search --limit 1 | awk '/^r[0-9]/,/1712/' 

svn -v log search --limit 1| sed -e '/^r[0-9]*/,/1712/!d' 

3 个答案:

答案 0 :(得分:1)

awk救援!

$ ... | awk '/^r[0-9]+/{rev=$1} rev && /^\[1712\]/{print rev; rev=""}'

r1055457

答案 1 :(得分:0)

使用sed

$ ... | sed -n '/^r[0-9][0-9]*/N;:A /\nr[0-9][0-9]*/D;/1712/!{s/\n.*//;N;bA};s/|.*\n.*//p'

答案 2 :(得分:-1)

您也可以将此awk与空RS一起使用,从而将所有连续的非空行视为一条记录:

svn -v log search --limit 1 | awk -v RS= '/1712[^\n]*$/{print $1}'

r1055457
[^\n]*$之后

1712确保我们仅在最后一行之前匹配1712