我正在尝试创建一个简单的bash脚本,用于验证哪些修订版本的注释中不包含某种模式。
例如:
------------------------------------------------------------------------
r272876 | user | 2014-10-30 11:15:06 +0000 (Qui, 30 Out 2014) | 1 line
PATTERN-17278: My comment.
------------------------------------------------------------------------
r272877 | user | 2014-10-31 12:06:41 +0000 (Sex, 31 Out 2014) | 1 line
My problematic revision
------------------------------------------------------------------------
r273529 | user | 2014-10-20 17:45:36 +0000 (Seg, 20 Nov 2014) | 2 lines
PATTERN-17297: Erro no angulo do vetor velocidade
------------------------------------------------------------------------
r273797 | user | 2014-10-14 11:35:05 +0000 (Ter, 4 Nov 2014) | 1 line
Other problematic revision
------------------------------------------------------------------------
r274096 | user | 2014-08-26 11:18:31 +0000 (Qua, 5 Nov 2014) | 1 line
And another
如何在列表中轻松打印r272877,r273797和r274096等修订版?
答案 0 :(得分:2)
首先,让我们定义一个shell变量,该变量包含SVN用来分隔日志条目的虚线:
RS='\n------------------------------------------------------------------------'
现在,我们可以打印不包含pattern
的所有日志条目:
svn log . | awk -v "RS=$RS" '!/pattern/{print RS,$0}'
或者,如果您只想要执行包含pattern
的日志条目,请使用:
svn log . | awk -v "RS=$RS" '/pattern/{print RS,$0}'
-v "RS=$RS"
awk
将其输入划分为记录并一次读入一条记录。在这里,我们将记录分隔符定义为SVN用于分隔日志条目的内容。
!/pattern/{print RS,$0}
awk
隐式循环输入中的每个记录。这会查找 not 包含pattern
的记录,其中pattern
可以是任何正则表达式。感叹号!
表示“不是”。打印符合此标准的记录。 print RS,$0
告诉awk
打印记录分隔符,然后打印此日志条目的内容。
我的subversion版本使用72个破折号作为记录分隔符。我不知道这是否会因版本而异。如果是,您可能需要适当调整RS
的定义。
使用保存在名为log
的文件中的示例日志输出,打印所有不包含PATTERN-17278
的记录:
$ awk -v "RS=$RS" '!/PATTERN-17278/{print RS,$0}' log
------------------------------------------------------------------------
r272877 | user | 2014-10-31 12:06:41 +0000 (Sex, 31 Out 2014) | 1 line
My problematic revision
------------------------------------------------------------------------
修订号是记录分隔符后面的第一个项目。要打印出修订版号,请使用:
svn log . | awk -v "RS=$RS" '!/pattern/{print $1}'
使用示例输入[在更新问题之前]作为示例:
$ awk -v "RS=$RS" '!/PATTERN-17278/{print $1}' log2
r2728
awk -v "RS=$RS" -v p='PATTERN-17278|PATTERN-17297' '$0 !~ p{print $1}' log3
r272877
r273797
r274096