2011-09-01 67 views
3

我有一個jar文件,我需要在Linux中執行它中的文件。 所以我需要逐行獲取unzip -l命令的結果。 我設法用這個命令提取文件名:從unzip獲取N行-l

unzip -l package.jar | awk '{print $NF}' | grep com/tests/[A-Za-Z] | cut -d "/" -f3 ; 

但我無法弄清楚如何獲得的文件名接二連三地執行它們。 我該怎麼做?

非常感謝。

+1

我不明白瘸子靠近v OTE。從什麼時候開始shell編程問題被認爲是非題目問題? **殼牌編程是編程,**所以這個問題絕對屬於這裏。這不是無關緊要的。 * Bloodyélitists!* – tchrist

+0

我通常在Java中編寫代碼,並且我可以告訴shell腳本至少具有挑戰性。 – Daddou

回答

1

這裏是我的嘗試,這也考慮到Daddou的要求刪除.class擴展名:

unzip -l package.jar | \ 
awk -F'/' '/com\/tests\/[A-Za-z]/ {sub(/\.class/, "", $NF); print $NF}' | \ 
while read baseName 
do 
    echo " $baseName" 
done 

注:

  • AWK命令還把手grep的任務剪
  • AWK命令也處理去除.class擴展
  • awk命令的結果通過管道輸送到而讀...命令
  • baseName的代表類的名稱文件,與的.class擴展去除
  • 現在,你可以做一些與$ baseName的
+0

它的工作原理,我也接受你的答案,謝謝你的提示。 – Daddou

2

如果你需要在一列中的第一行,添加一個管道,並得到使用head -1

第一行,以便您一個郵輪將是這樣的:

unzip -l package.jar | awk '{print $NF}' | grep com/tests/[A-Za-Z] | cut -d "/" -f3 |head -1;

這會給你第一行

現在,球杆頭和尾巴拿到第二線。

unzip -l package.jar | awk '{print $NF}' | grep com/tests/[A-Za-Z] | cut -d "/" -f3 |head -2 | tail -1;

得到第二行。

但是從編寫腳本的觀點來看,這不是一個好方法。你需要的是如下的循環:

for class in `unzip -l el-api.jar | awk '{print $NF}' | grep javax/el/[A-Za-Z] | cut -d "/" -f3`; do echo $class; done; 

可以取代echo $class與你所希望的任何命令 - 並使用$class獲得當前的類名。

HTH

+0

感謝您的回答。 對不起,如果我是模糊的,這是我真正需要的。 這就是我現在所擁有的後,我執行我的命令: file1.class file2.class file3.class file4.class 這就是我想要的: file1.class ONLY 然後file2.class只有...所以我可以單獨執行它們。 所以基本上我想要得到第一行,然後第二個,第三個直到結果集的結尾... 您的命令沒有爲我工作對不起。 – Daddou

+0

查看編輯答案 –

+0

謝謝你的指環,我設法和sed一樣,我會接受你的答案。但我能知道爲什麼我的方法不好嗎? – Daddou