0

我正在使用 perl 解析崩溃日志,并且我想提取回溯组件。我使用以下命令获取日志文件:

$log = `adb shell 'ls -d ./tombstones/*' |grep tombstone_ | tr '\r' ' ' | tail -n1 | xargs adb shell cat`;

(我不熟悉 perl,如您所见)

我想扫描结果变量(日志)以查找回溯部分。这些部分存在于文本:“backtrace”和以下空行之间。

我的问题是,如何将触发器运算符应用于局部变量,就好像它是文件输入一样?

4

2 回答 2

1

您需要使用触发器运算符吗?正则表达式怎么样?

@backtrace_sections = $log =~ /(^backtrace.*?)\n\n/gm;
于 2013-10-14T18:20:31.080 回答
1

我假设你想要的是结构的等价物

while (<>) {
    if (m/backtrace/ .. m/^$/) {
        # processing
    }
}

我想到了两种方法来做到这一点:

  1. 在数组上下文中使用反引号运算符:

    my @lines = qx{$your_command};
    for (@lines) {
        if (m/backtrace/ .. m/^$/) {
            # process
        }
    }
    
  2. 用于open打开文件:

    open my $fh, '-|', qq{$your_command} or die "Can't open command: $!";
    while (<$fh>) {
        if (m/backtrace/ .. m/^$/) {
            # process
        }
    }
    close $fh or die "close failed: $! $?";
    

    这样做的好处是您不必将整个输出读入内存。

于 2013-10-15T14:34:07.333 回答