【问题标题】:Need to parse this dumpsys output (preferably with Perl)需要解析这个 dumpsys 输出(最好用 Perl)
【发布时间】:2016-03-04 22:52:31
【问题描述】:

我有问题。我需要解析下面给出的这个 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:标题下的内容(例如,我不想要@下的内容987654323@标题)。

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

【问题讨论】:

    标签: perl awk sed grep


    【解决方案1】:

    你没有说你是否想要标题本身 - 我假设你确实想要它。这是编写“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 新手,所以在这里需要一点帮助。无论如何,谢谢!
    【解决方案2】:

    根据这些日志的格式,您可以使用 sed 选择您想要的块,例如,假设每个块后面都有一个空行:

    $ sed -n '/Non-Data Actions:/,/^$/p' dumpsys
     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"
    

    【讨论】:

      猜你喜欢
      • 2015-10-15
      • 2015-06-03
      • 2016-05-13
      • 1970-01-01
      • 2016-07-08
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      相关资源
      最近更新 更多