【问题标题】:Search for multiple paths in a tar archive在 tar 存档中搜索多个路径
【发布时间】:2021-08-08 04:42:03
【问题描述】:

我知道我可以在tar 中搜索多个strings,如下所示

tar -tf $file |  egrep -i 'str1|str2|str3'

这给了我很多我不感兴趣的路径,例如字符串 str1 是 bfoa

/data/misc/user/0/info.bfoa.com
/data/app/info.bfoa.com
/data/data/info.bfoa.com

如果 str2 是 ubercab

/data/misc/user/0/com.ubercab
    /data/app/com.ubercab
    /data/data/com.ubercab

是来自tar 列表的匹配项。从这些我只需要那些 /data/data/*string* 模式,例如 /data/data/com.ubercab

我试过了

 tar -tf $file |  egrep -i '/data/data/*str1*|/data/data/*str2*|/data/data/*str3*'

它说

egrep: repetition-operator operand invalid

那么我如何在 tar 搜索中获得这些东西,就在 1 grep 尝试中:
- 搜索列表 search1|search2|search3
-搜索应该是regexes -search 字符串应该通过路径搜索匹配
- 只想要父目录/data/data/com.ubercab 而不是显示其内容

【问题讨论】:

    标签: regex shell grep tar


    【解决方案1】:

    我认为您想要 egrep 的正则表达式模式是:

    tar tf bundle.tar | egrep -E "/data/data/.*(str1|str2|str3).*"
    

    【讨论】:

    • ty.will 试一试并发布结果。
    • 这个网站非常有帮助:regex101.com
    • 建议加.*:grep -i -E '/data/.*(str1|str2|str3)'
    • 另外,从您的评论来看,您似乎已经在单独的双引号字符串中尝试了正则表达式,但这不起作用,尤其是中间有管道字符 |,这对贝壳。它必须是一个字符串。
    • 我刚刚尝试过,它在我的 MacOS 上运行:tar tf bundle.tar | egrep -E "foo/bar/.*(Doc|Glk).*"——确保使用这些双引号并将括号和垂直字符(管道)保留在其中,否则 shell 将解释为别的东西。
    猜你喜欢
    • 1970-01-01
    • 2013-09-11
    • 2021-06-01
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    相关资源
    最近更新 更多