Получить N строки из разархивировать -l - PullRequest
3 голосов
/ 01 сентября 2011

У меня есть файл JAR, мне нужно выполнить файлы в нем в Linux.Поэтому мне нужно получить результат командной строки unzip -l построчно.Мне удалось извлечь имена файлов с помощью этой команды:

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

Но я не могу понять, как получить имена файлов одно за другим, чтобы выполнить их.Как я могу это сделать, пожалуйста?

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 01 сентября 2011

Если все, что вам нужно, в первой строке столбца, добавьте трубу и получите первую строку, используя 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 голос
/ 01 сентября 2011

Вот моя попытка, которая также учитывает просьбу Дадду удалить расширение .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
...