我需要提取在提交之间删除的文件名。我有这个命令:
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
答案 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}'