You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用grep和sed提取package:后至文件夹名的精准内容

解决方案:用grep+sed提取目标路径

针对你给出的文本,我们可以通过grep过滤目标行 + sed提取路径的组合,或者直接用sed一步完成,来得到你想要的结果。下面分两种方法讲解,方便你学习grep和sed的用法:

方法1:sed单命令完成

直接运行这条命令处理你的文本文件(假设文件名为packages.txt):

sed -n 's/^package:\(.*\)\/[^\/]*\.apk=.*/\1/p' packages.txt

命令解释:

  • -n:告诉sed只打印经过处理的匹配行,避免输出原文本中不需要的内容
  • s/查找规则/替换内容/p:这是sed的替换命令,p表示打印替换后的结果
    • ^package::匹配行开头的package:,确保我们只处理符合格式的行
    • \(.*\)\/:用\( \)捕获一个分组,.*是贪婪匹配,会从package:后面一直匹配到最后一个斜杠(因为贪婪模式会优先匹配最长的内容,所以会跳过前面所有的斜杠,直到最后一个)
    • [^\/]*\.apk=:匹配最后一个斜杠后的文件名部分,[^\/]*表示"任意非斜杠的字符",也就是apk文件名,.apk=是固定后缀
    • .*:匹配.apk=后面的包名内容
    • \1:把整个匹配的内容替换成第一个捕获组的内容,也就是我们要的末尾无斜杠的文件夹路径

运行这条命令后,你会得到如下输出:

data/app/com.android.chrome-DeX_54==
data/dataapp/ExactCalculator
data/hw_init/cust/app/Email
system/app/KeyChain
system/delapp/WallpaperBackup
system/framework
system/priv-app/CIT
vendor/app/NlpService

方法2:grep过滤 + sed提取

如果你想分开练习grep和sed的功能,可以先用grep过滤出符合格式的行,再用sed提取路径:

grep '^package:.*\.apk=' packages.txt | sed 's/^package:\(.*\)\/[^\/]*\.apk=.*/\1/'

分步解释:

  1. grep部分:grep '^package:.*\.apk=' packages.txt
    • ^package::只匹配以package:开头的行
    • .*\.apk=:确保行中包含.apk=,过滤掉不符合格式的行(比如示例中的package:system/framework/framework-res.apk=android其实也符合,会被保留)
  2. sed部分:和方法1中的sed命令逻辑完全一致,负责提取路径

额外:用grep单独提取(Perl正则模式)

如果你想尝试grep的高级用法,可以启用Perl兼容正则(-P选项),直接提取目标内容:

grep -oP '^package:\K.*(?=\/[^\/]*\.apk=)' packages.txt

命令解释:

  • -o:只输出匹配到的部分,而不是整行
  • -P:启用Perl兼容正则,支持更多高级语法
  • ^package:\K:匹配package:,然后\K会忽略前面的内容,不输出
  • .*(?=\/[^\/]*\.apk=):正向预查,匹配到"最后一个斜杠 + 文件名.apk="之前的所有内容,确保我们只提取到文件夹路径

这个命令的输出和前面两种方法完全一致,适合你扩展grep的知识。

内容的提问来源于stack exchange,提问作者Mujtaba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:37:22