如何从 unzip -l 的输出中获取特定路径

How to grep a specific path from output of unzip -l

我需要在 .app 文件夹之后提取 Info.plist 文件的路径。

$ 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)?

unzip -l test.ipa | grep -o 'Payload/.*\.app/Info\.plist'

您需要的正则表达式是 Payload/.*\.app/Info\.plist。注意转义点 - 它们必须按字面意思匹配。

.* 将由 shell 解释,除非您将 grep 参数括在引号中(双引号在您的情况下也可以,因为在此特定表达式中可能不会发生变量扩展冲突)。

最后,-o 开关告诉 grep 只输出匹配项。

在一个模式中,. 表示任何字符,* 表示前面字符的 0 次或多次。

你的命令应该是:

unzip -l test.ipa | grep -o 'Payload/.*\.app/Info\.plist'

如果您不确定是否所有路径都以 Payload 开头,请尝试

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

匹配 Info.plist.

之前的所有非空白字符