繁体   English   中英

如何将触发器操作器应用于cat输出?

[英]How do apply the flip-flop operator to cat output?

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

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

(我不熟悉perl,你可以看到)

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

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

你需要使用触发器操作器吗? 正则表达怎么样?

@backtrace_sections = $log =~ /(^backtrace.*?)\n\n/gm;

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

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: $! $?"; 

    这样做会产生很好的效果,您不必将整个输出读入内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM