2012-02-13 83 views
1

所以我想使用shell腳本來自動執行一個手動任務,但是我對於如何解析一些命令的輸出有點遺憾。我可以在沒有任何問題的情況下在其他語言中使用這個功能,因此我只會解釋我在僞代碼中要做的事情,並提供一個我試圖解析的cmd輸出示例。輸出Shell腳本 - 如何正確解析輸出,學習示例。

例子:

變動2167467上2012/02/13由user1234 @文件名 '提交的說明'

我需要分析出是 '2167467'。所以我想要做的就是分割空間並將元素1用於另一個命令。我的下一個命令的輸出是這樣的:在2012/02/13 18時10分15秒

description of submission 

受影響的文件

變化2167463由user1234 @文件名...

。 .. //文件路徑/ DIR1/DIR2/DIR3 /文件名#2298編輯

我需要解析出 '//文件路徑/ DIR1/DIR2/DIR3 /文件名#2298',並使用在另一個命令。再次,我會做的是從輸出中刪除空行,抓住第四行,並在空間上分割。從那裏,我會抓住分割的第一個元素,並在我的下一個命令中使用它。

如何在shell腳本中執行此操作?示例或指向一些教程會很好。

回答

1

其不清楚您是否想使用第一個命令的結果來處理第二個命令。如果這是真的,那麼

targString=$(cmd1 | awk '{print $2}') 
command2 | sed -n "/${targString}/{n;n;n;[email protected]*[/][/]@//@;p;}" 

您的示例數據中有2個不同的變動值,(2167467,2167463),所以如果你只是想處理此輸出兩種不同的方式,它更簡單

cmd1 | awk '{print $2}' 
cmd2 | sed -n '/Change/{n;n;n;[email protected]*[/][/]@//@;p;}' 

我希望這有助於。

+0

所有的想法都很不錯,但這個幫助最大。我結束了找到xargs,與此同時,它完美的作品:' | awk'{print $ 2}'| xargs | grep'^ \。\。\。' | awk'{print $ 2}' ' – user797963 2012-02-16 18:23:05

0

你的第一個變量是這樣的

temp="Chg 2167467 on 2012/02/13 by [email protected] 'description of submission'" 

收穫的人的數量,你要做到這一點:

temp=`echo $temp | cut -f2 -d" "` 

讓你的第二個命令的輸出保存到一個像這樣的文件

command $temp > file.txt 

爲了得到你想要的文件,你可以運行這個什麼:

temp=`tail -1 file.txt | cut -f2 -d" "` 
rm file.txt 

代碼的最後塊獲取文件的最後一個非白人線並限定在第二組空格