从unzip -l获取N行

时间:2011-09-01 14:49:36

标签: linux awk grep unzip

我有一个jar文件,我需要在Linux中执行它中的文件。 所以我需要逐行获取unzip -l命令的结果。 我已设法使用此命令提取文件名:

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

但我无法弄清楚如何一个接一个地获取文件名来执行它们。 我该怎么办?

非常感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 cut
  • 的任务
  • awk 命令还处理.class扩展名
  • 的删除
  • awk命令的结果通过管道传输到,同时读取... 命令
  • baseName 表示类文件的名称,删除了 .class 扩展名
  • 现在,您可以使用$ baseName
  • 执行某些操作