2012-12-19 207 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

相關問題