从svn日志中提取已删除文件的名称

时间:2017-08-08 09:09:44

标签: svn awk grep

我需要提取在提交之间删除的文件名。我有这个命令:

svn log -r 1:30 -v | grep ' D ' | awk -F ' ' '{print $2}'

对于此命令

svn log -r 28:30 -v 

输出是:

r28 | admin | 2017-08-08 10:02:03 +0000 (Út, 08 srp 2017) | 1 line
Changed paths:
   D /smartsvn-linux-9_2_1.tar.gz

Remove test file 1
------------------------------------------------------------------------
r29 | admin | 2017-08-08 10:02:21 +0000 (Út, 08 srp 2017) | 1 line
Changed paths:
   D /smartsvn-linux-9_2_1 (copy).tar.gz

Remove test file 2
------------------------------------------------------------------------
r30 | admin | 2017-08-08 10:02:52 +0000 (Út, 08 srp 2017) | 1 line
Changed paths:
   D /testfile.txt

Remove testing file 3

对于此命令:

svn log -r 28:30 -v | grep ' D ' 

输出是:

   D /smartsvn-linux-9_2_1.tar.gz
   D /smartsvn-linux-9_2_1 (copy).tar.gz
   D /testfile.txt

从那个输出我希望得到没有字母D的输出:

   /smartsvn-linux-9_2_1.tar.gz
   /smartsvn-linux-9_2_1 (copy).tar.gz
   /testfile.txt

它几乎正常但如果文件名包含空格则不起作用。我明白为什么会这样,但我不知道,我怎么能解决它。或者有更好的方法,我怎么做?

编辑:同时我解决了我的问题,但我确信这是垃圾。它有效,但我确信它存在更好的方式。我只使用grep或egrep,但我不知道grep或egrep是否支持组。

svn log -r 1:30 -v | grep ' D ' | egrep '/([a-zA-Z_.0-9\-\(\) -]+)$' -o

1 个答案:

答案 0 :(得分:0)

无需grep,您可以使用awk来实现grep可以执行的操作。 使用/ D/过滤包含D

的行

您可以使用awk打印从{6开始的$0的子字符串(这是您所需模式的起点)

$ svn log -r 28:30 -v | awk '/ D/{print substr($0,6)}'

或者您可以使用sub(/[^/]*/来过滤non-/

$ svn log -r 28:30 -v | awk '/ D/{sub(/[^\/]*/,"",$0);print $0}'