Как получить конкретный путь из вывода unzip -l - PullRequest
0 голосов
/ 26 мая 2018

Мне нужно извлечь путь к файлу Info.plist сразу после папки .app.

$ unzip -l test.ipa | grep Info.plist
258  05-25-2018 11:52   Payload/test.app/CDVLaunchScreen.storyboardc/Info.plist
2197  05-25-2018 11:52   Payload/test.app/Info.plist

Проблема в том, что папка .app имеет разные имена в каждом файле .ipa.Я не могу grep для Payload/test.app/Info.plist.Я пробовал:

$ unzip -l test.ipa | grep Payload/*.app/Info.plist
$ unzip -l test.ipa | grep "Payload/..app/Info.plist"

, который ничего не дает.

Как будет выглядеть правильный аргумент grep?Кроме того, как мне извлечь только путь (Payload/test.app/Info.plist) вместо всей строки (2197 05-25-2018 11:52 Payload/test.app/Info.plist)?

Ответы [ 3 ]

0 голосов
/ 26 мая 2018

В шаблоне . означает любой символ, а * означает 0 или более раз предшествующий символ.

Ваша команда должна быть:

unzip -l test.ipa | grep -o 'Payload/.*\.app/Info\.plist'
0 голосов
/ 26 мая 2018

Если вы не уверены, что все пути начинаются с Payload, попробуйте

unzip -l test.ipa | grep -P '(?<=\s)\S*Info.plist'

, который соответствует всем непробельным символам до Info.plist.

0 голосов
/ 26 мая 2018
unzip -l test.ipa | grep -o 'Payload/.*\.app/Info\.plist'

Требуемое регулярное выражение Payload/.*\.app/Info\.plist.Обратите внимание на экранированные точки - они должны совпадать буквально.

.* будет интерпретироваться оболочкой, если вы не заключите параметр grep в кавычки (двойные кавычки также будут хороши в вашем случае, так как никакая коллизия расширения переменной не можетв этом конкретном выражении).

Наконец, переключатель -o сообщает выводу grep только совпадение.

...