2012-03-02 60 views
1

如何搜索shell腳本的輸出字並保存在其他變量中。搜索輸出行並保存在變量中

下面的命令將顯示我的視圖中的基線列表。

cmd :cleartool lsstream -fmt "%[found_bls]NXp\n" -view $VIEW_NAME 

輸出:

baseline:MHC_BUILDTREE1.0.1 
baseline:JEPG_DUIF_CI 
baseline:MOR_BuildTree_BLD_I.0.1 

我需要搜索包含"MOR_BuildTree"我有一個變量來保存執行所述命令的其餘部分的線和輸出線。 任何人都可以給出建議嗎?

回答

0

你問不完全知道什麼,而是設置爲命令結果的變量,你可以使用:

var=`command` 

,或者你可以管你的命令,一些過濾器需要重新格式化。

command | some_filter | another filter 

你也可以將二者結合起來:

var=`command | some_filter | another filter` 
0

這裏就是我剛纔測試,以得到一個基線的所有基礎的基準:

$ res=`cleartool lsstream -fmt "%[found_bls]CXp" -view $VIEW_NAME | tr -s " " "\\012" | grep $yourBaselineName| sed -e "s/.*://" -e "s/@.*//"` 

(設置$yourBaselineName到你想提取的恰當的名字)

主要困難來自事實lsstream -fmt "%[found_bls]CXp"將在同一輸出行中列出所有基礎基線(因此輸出僅爲一行基線名稱,用逗號分隔)。
您需要首先將線條拆分爲多個線條。
請參閱「How to split one string into multiple strings in bash shell?」:即上述命令的tr -s " " "\\012"部分。

然後,你需要刪除的內容之前和之後的基準名稱:

baseline:[email protected]/vobs/YourPVob 

上述命令的sed部分可以這樣做:

sed -e "s/.*://" -e "s/@.*//" 

(兩個正則表達式之前刪除一切':'和'@'之後)

0

這不是一段簡單的shell腳本嗎?

variable=$(cmd :cleartool lsstream -fmt "%[found_bls]NXp\n" -view $VIEW_NAME | 
      sed -n '/MOR_Buildtree/s/^baseline://p') 

-n選項表示'默認不打印'。該命令查找您的名字,刪除前導baseline:並打印它。