我如何重复搜索文件,从一个文本开始到另一个文本结束?
例如,我有一个非常大的日志。整个日志中有一些部分以某些文本开头和结尾,例如:
我想在[startset]和[/ startset]之间收集文本。这部分是重复出现的,所以我需要循环并继续这样做,直到所有文本都被收集(并转储到一个单独的文件中)[startset] blah blah blah [/startset]
由于
答案 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:~ #