【问题标题】:A command fetching SVN revisions without comments获取 SVN 修订版且不带注释的命令
【发布时间】:2017-04-06 13:24:18
【问题描述】:

如何在 cmets 中获取未提交 jira ticket# 的 SVN 修订?

 ------------------------------------------------------------------------
 r1 | user2 | 2006-11-22 02:13:42 -0500 (Tue, 22 Nov 2006) | 1 line
 Changed paths:
 M /trunk/testfile.txt

 added new file
------------------------------------------------------------------------
r2 | user 3 | 2006-11-22 02:08:37 -0500 (Tue, 22 Nov 2006) | 1 line
Changed paths:
M /trunk/testfile1.txt

added new file
------------------------------------------------------------------------
r3 | user 1| 2006-11-18 02:13:56 -0500 (Fri, 18 Nov 2006) | 1 line
Changed paths:
M /trunk/testfile5.txt

Jira_issue-123 added new file

期望的输出:

r1
r2

【问题讨论】:

  • 你能发布一个示例输入和你想看到的输出吗?
  • 现在编辑问题。

标签: regex svn awk sed cut


【解决方案1】:

以 XML 格式解析日志

如果您想可靠地解析日志,请使用--xml 选项和能够解析XML 的工具。我会推荐xmlstarlet

例如,以下命令列出了修订号:

svn log -q --xml | xmlstarlet sel -t -v '//logentry/@revision'

样本输出

1771403
1771252
1771240

XPath 表达式从文档中的所有 (//) logentry 元素中选择 revision 属性的值。

您可以在号码前加上r,如下所示:

svn log -q --xml | xmlstarlet sel -T -t \
  -m '//logentry' -v 'concat("r", @revision)' -n

样本输出

r1771403
r1771252
r1771240

xmlstarlet 命令将"r" 与文档中所有logentry 元素的revision 属性值连接起来。

xmlstarlet 不可用时

如果由于某种原因无法安装xmlstarlet,您可以借助grepsvn log -q 输出进行稍微不太可靠的解析:

svn log -q | grep -o '^r[0-9]\+'

样本输出

r1771403
r1771252
r1771240

同样使用sed

svn log -q | sed -e '/^[^r]/d; s/^\(r[0-9]\+\).*/\1/'

第一个 sed 表达式删除 (d) 行,如果它与模式不匹配(如果行的开头没有 r)。第二个表达式用与\(\) 之间的模式匹配的部分替换该行。

正则表达式匹配行首的r (^),后跟一位或多位数字。 -o 选项指示 grep 只打印匹配的部分。

【讨论】:

    猜你喜欢
    • 2023-01-11
    • 2018-01-01
    • 2010-09-05
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多