代码之家  ›  专栏  ›  技术社区  ›  mles

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

  •  1
  • mles  · 技术社区  · 6 年前

    我需要提取信息的路径。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
    

    问题是。每个应用程序文件夹的名称都不同。ipa文件。我不能相信你 Payload/test.app/Info.plist .我试过:

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

    结果一无所获。

    正确的grep参数是什么样的?还有,我如何只提取路径( 有效载荷/测试。应用程序/信息。普利斯特 )而不是整排( 2197 05-25-2018 11:52 Payload/test.app/Info.plist )?

    3 回复  |  直到 6 年前
        1
  •  1
  •   Dmitry Egorov    6 年前
    unzip -l test.ipa | grep -o 'Payload/.*\.app/Info\.plist'
    

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

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

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

        2
  •  1
  •   Toto    6 年前

    以某种模式 . 指任何字符和 * 表示前面字符的0倍或更多倍。

    你的命令应该是:

    unzip -l test.ipa | grep -o 'Payload/.*\.app/Info\.plist'
    
        3
  •  1
  •   Armin    6 年前

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

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

    它匹配之前的所有非空白字符 Info.plist .