2012-12-19 57 views
0

当我执行以下svn命令时,会得到下面的输出。在shell脚本中解析命令的输出并将结果存储在一个变量中

$ svn log -r 1:HEAD --limit 1 http://plugins.svn.wordpress.org/bulk-delete 
------------------------------------------------------------------------ 
r91525 | plugin-master | 2009-02-03 10:39:23 +0530 (Tue, 03 Feb 2009) | 1 line 

adding bulk-delete by sudar 
------------------------------------------------------------------------ 

我写一个shell脚本,我想分析上面的命令的输出,并获得修订号(在这种情况下r91525)并将其存储在一个shell变量,这样我可以在使用它后续的命令。

我试过切割命令,并能够在第二行获得修订号,但其他行仍然出现。

$ svn log -r 1:HEAD --limit 1 http://plugins.svn.wordpress.org/bulk-delete | cut -f1 -d'|' 
------------------------------------------------------------------------ 
r91525 

adding bulk-delete by sudar 
------------------------------------------------------------------------ 

问题:如何检索修订号并存储在shell变量中,以便我可以在后续命令中使用它?

+0

如果你需要什么是最新版本,请参阅http://stackoverflow.com/a/111173/393701 – SirDarius

+0

@SirDarius不,我不想要最新版本。我想要引入这个目录的版本。 – Sudar

回答

2

您可以使用sed这一点。

svn log --limit 1 | sed -n -e 's/^\(r[0-9]\+\).*/\1/p' 

这将只打印修订版本,例如, r1234

如果您只需要修改使用

svn log --limit 1 | sed -n -e 's/^r\([0-9]\+\).*/\1/p' 

更新的数量:将其存储在一个变量使用

庆典:

REVISION=$(svn log --limit 1 | sed -n -e 's/^r\([0-9]\+\).*/\1/p') 

tcsh的

set revision = `svn log --limit 1 | sed -n -e 's/^r\([0-9]\+\).*/\1/p'` 
+0

这回答我的问题的一部分。但是,我如何将结果存储在shell变量中? – Sudar

+0

更新了我的答案,关于如何将其存储在变量中 – dwalter

2

试试这个:

svn blahblah |awk 'NR==2{print $1;exit;}' 

测试:

kent$ echo "------------------------------------------------------------------------ 
r91525 | plugin-master | 2009-02-03 10:39:23 +0530 (Tue, 03 Feb 2009) | 1 line 

adding bulk-delete by sudar 
------------------------------------------------------------------------"|awk 'NR==2{print $1;exit;}' 
r91525 
+0

这回答了我的问题的一部分。但是,我如何将结果存储在shell变量中? – Sudar

+0

@Sudar尝试'var = $(svn ... | awk ...)'然后echo $ var你应该看到存储的值。 – Kent

+0

这有效,但我接受其他答案,因为他也给了tcsh版本。 Upvoted虽然.. – Sudar

相关问题