在Linux上的不同元素之间输出日志以获取输出

时间:2014-07-07 17:57:32

标签: linux grep

我如何重复搜索文件,从一个文本开始到另一个文本结束?
例如,我有一个非常大的日志。整个日志中有一些部分以某些文本开头和结尾,例如:

[startset]
blah blah blah
[/startset]
我想在[startset]和[/ startset]之间收集文本。这部分是重复出现的,所以我需要循环并继续这样做,直到所有文本都被收集(并转储到一个单独的文件中)

由于

2 个答案:

答案 0 :(得分:2)

您可以使用awk。这使用来自Bens的数据:

awk '/\[\/startset\]/ {f=0} f; /\[startset\]/ {f=1}' file
grab this 1
grab this 2
grab this 3
grab this 4

一般

awk '/stop/ {f=0} f; /start/ {f=1}'

如果满足条件,使用标志f来控制输出。

答案 1 :(得分:0)

我无法用grep做到这一点。你对perl脚本没问题吗?对我来说这是最简单的。假设您的文件符合该格式,这是一个基本的脚本,几乎没有错误检查。

我的数据文件

testlinux:~ # cat sample.txt
ignore
ignore
[startset]
grab this 1
grab this 2
[/startset]
ignore
ignore
[startset]
grab this 3
grab this 4
[/startset]
ignore this
ignore that
testlinux:~ #

我的perl脚本

testlinux:~ # cat sample.pl
#!/usr/bin/perl

$infile="sample.txt";

open(INFILE,"$infile");

$startset=0;

while (<INFILE>) {
    chop($line=$_);
    if ($line =~ /\[startset\]/) {
            $startset=1;
            chop($line=<INFILE>);
    }
    if ($line =~ /\[\/startset\]/) {
            $startset=0;
    }
    if ($startset eq 1) {
            print "$line\n";
    }
}


testlinux:~ # 

示例运行

testlinux:~ # ./sample.pl
grab this 1
grab this 2
grab this 3
grab this 4
testlinux:~ #