Linux 从unzip-l获取N行

Linux 从unzip-l获取N行,linux,awk,grep,unzip,Linux,Awk,Grep,Unzip,我有一个jar文件,我需要在Linux中执行其中的文件。 所以我需要逐行获得unzip-l命令的结果。 我已使用以下命令成功提取文件名: unzip -l package.jar | awk '{print $NF}' | grep com/tests/[A-Za-Z] | cut -d "/" -f3 ; 但是我不知道如何一个接一个地获取文件名来执行它们。 请问我怎么做 非常感谢。如果您需要列中的第一行,请添加一个管道并使用head-1 因此,您的一行代码将如下所示: unzip-l pac

我有一个jar文件,我需要在Linux中执行其中的文件。 所以我需要逐行获得unzip-l命令的结果。 我已使用以下命令成功提取文件名:

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-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

以下是我的尝试,其中还考虑了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和cut的任务
  • awk命令还处理.class扩展的删除
  • awk命令的结果通过管道传输到while read。。。命令
  • baseName表示类文件的名称,扩展名为.class
  • 现在,您可以使用$baseName做一些事情

谢谢您的回答。对不起,如果我含糊其辞,这正是我需要的。这是我现在在执行命令后得到的:file1.class file2.class file3.class file4.class这是我想要的:file1.class ONLY然后file2.class ONLY。。。所以我可以分别执行它们。所以基本上我想得到第一行,然后是第二行,第三行,直到结果集结束。。。你的命令对我无效对不起。谢谢你的枪手,我和塞德也做到了,我会接受你的回答。“但是我能知道为什么我的方法不好吗?”达杜-谢谢,很高兴看到你明白了。有很多方法可以使用shell脚本来解决这个问题。我给了你最通用的,可以在像你这样的场景中使用的,或者至少它看起来是什么。既然你在这里:)我如何抑制.class扩展?你有一个好的和清晰的参考网站来写高效的脚本吗?谢谢,洛蒂会给你提示-你可以用sed替换[a-Za-z].class和back reference\1-或者你可以用grep和cut在一起或者grep和awk在一起。但sed会更好。看看你能不能得到一份“邪恶的酷炫外壳脚本”我不明白这一票有多差劲。从什么时候开始,shell编程问题因为是非编程问题而被认为是离题的?Shell编程就是编程,所以这个问题肯定属于这里。这不是离题。该死的政治主义者!我通常用Java编写代码,我可以看出,shell脚本编写至少同样具有挑战性。