perl - 需要解析这个 dumpsys 输出(最好使用 Perl)

标签 perl awk sed grep

我有一个问题。我需要解析下面给出的 dumpsys 输出:

 Activity Resolver Table:
 Non-Data Actions:
    android.intent.action.MAIN:
    422df0c8.   com.sec.factory.camera/com.sec.android.app.camerafirmware.CameraFirmware filter 422df360
       Action: "android.intent.action.MAIN"
      Category: "android.intent.category.DEFAULT"
    422df610 com.sec.factory.camera/com.sec.android.app.camerafirmware.CameraFirmware_user filter 422b65f0
      Action: "android.intent.action.MAIN"
      Category: "android.intent.category.DEFAULT"
    420d08e8 com.sec.factory.camera/com.sec.android.app.camerafirmware.CameraFirmwareUpdate_Booting filter 420d0ac8
      Action: "android.intent.action.MAIN"
      Category: "android.intent.category.DEFAULT"
  com.sec.android.app.camaftest.SCAN:
    420a2220 com.sec.factory.camera/com.sec.android.app.camaftest.CaptureActivity filter 4209f468
      Action: "com.sec.android.app.camaftest.SCAN"
      Category: "android.intent.category.DEFAULT"

Receiver Resolver Table:
 Schemes:
    android_secret_code:
     422b69b0.   com.sec.factory.camera/com.sec.android.app.camerafirmware.CameraFirmwareBroadCastReceiver filter 422b6b80
       Action:   "android.provider.Telephony.SECRET_CODE"
       Scheme:  "android_secret_code"
      Authority: "34971539": -1
      Authority: "7412365": -1

Non-Data Actions:
    android.intent.action.BOOT_COMPLETED:
     420d0c70. com.sec.factory.camera/com.sec.android.app.camerafirmware.CameraFirmwareBroadCastReceiver filter 420d0d18
       Action: "android.intent.action.BOOT_COMPLETED"

从这个输出(来自 android 中名为 dumpsys 的工具)中,我想获取 Non-Data Actions: 标题下的内容only(我不,例如,需要 Receiver Resolver Table: 标题下的内容)。

我希望最好在 Perl 中执行此操作,但欢迎其他建议。

最佳答案

你没有说你是否想要标题本身 - 在这里我假设你确实想要它。这是“Unix 过滤器”样式的编写方式,这意味着您需要将转储数据通过管道传输到其中,或者将包含数据的文件名作为脚本的第一个参数提供。

#!/usr/bin/env perl
use v5.12;

my $target = 'Non-Data \s+ Actions:';
my $taking_data = 0;

while (<>) {
   $taking_data = 1 if (/ ^ \s* $target \s* /x) ;
   print if $taking_data;
   $taking_data = 0 if / ^ \s* $ /x ;
}

像这样运行:$ cat dump_data.txt | ./android.pl$ ./android.pl dump_data.txt 生成:

Non-Data Actions:
    android.intent.action.MAIN:
    422df0c8.   com.sec.factory.camera/com.sec.android.app.camerafirmware.CameraFirmware filter 422df360
       Action: "android.intent.action.MAIN"
      Category: "android.intent.category.DEFAULT"
    422df610 com.sec.factory.camera/com.sec.android.app.camerafirmware.CameraFirmware_user filter 422b65f0
      Action: "android.intent.action.MAIN"
      Category: "android.intent.category.DEFAULT"
    420d08e8 com.sec.factory.camera/com.sec.android.app.camerafirmware.CameraFirmwareUpdate_Booting filter 420d0ac8
      Action: "android.intent.action.MAIN"
      Category: "android.intent.category.DEFAULT"
  com.sec.android.app.camaftest.SCAN:
    420a2220 com.sec.factory.camera/com.sec.android.app.camaftest.CaptureActivity filter 4209f468
      Action: "com.sec.android.app.camaftest.SCAN"
      Category: "android.intent.category.DEFAULT"

Non-Data Actions:
    android.intent.action.BOOT_COMPLETED:
     420d0c70. com.sec.factory.camera/com.sec.android.app.camerafirmware.CameraFirmwareBroadCastReceiver filter 420d0d18
       Action: "android.intent.action.BOOT_COMPLETED"

没有太多内容;如果我们在一行上找到目标,则设置一个标志(可选地由空格包围);如果我们看到空行,则清除标志;和之间;如果设置了标志,则打印该行。

正则表达式末尾的 '/x' 打开“扩展模式”,允许无关紧要 正则表达式中的空白以使布局更清晰。

关于perl - 需要解析这个 dumpsys 输出(最好使用 Perl),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35807527/

相关文章:

awk 和 sprintf 进行零填充

bash - sed 分行(高级)

c - 来自 PSQL 触发器的提示

perl - 为什么要使用 '-' 登录 Perl 哈希键名称?

linux - 根据现有列的值添加新列

linux - 如何根据标题名称添加两列并根据标题名称将结果粘贴到第三行?

perl - 如何在 Perl 中 tar 多个文件?

javascript - 在加载时从 html Javascript 生成服务器 cgi?

macos - SED - 无法对 UTF-8 编码的字符执行某些命令

linux - 如何使用 cut/awk/sed 命令从 linux 中的文件中选择记录