2011-09-01 69 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