如何在unix中基于相同的信息提取文本块

如何在unix中基于相同的信息提取文本块,unix,Unix,假设我有一个具有以下模式的大文件: ======start========= id:xxxxxxxxx ............. ............. ======end=========== ======start========= id:xxxxxxxxx ............ ............ ======end=========== 如何根据输入的id提取这些文本块?请尝试使用以下方法来grep: $ grep id -A2 file.txt 它将根据您的示例仅返

假设我有一个具有以下模式的大文件:

======start=========
id:xxxxxxxxx
.............
.............
======end===========
======start=========
id:xxxxxxxxx
............
............
======end===========

如何根据输入的id提取这些文本块?

请尝试使用以下方法来
grep

$ grep id -A2 file.txt
它将根据您的示例仅返回
==start==
==end==

id:xxxxxxxxx
.............
.............
--
id:xxxxxxxxx
............
............

因为我主要是PHP用户,所以这是PHP版本:

另存为bigparser.php

<?php
if(empty($argv[2])){
    die('run as '.$argv[0].' bigfile.txt my-section-id');
}
$filename = $argv[1];
$section = $argv[2];

$handle = fopen($filename, "r") or die("Couldn't get file");
$printBuffer = false;

if ($handle) {
while (!feof($handle)) {
    $buffer = fgets($handle, 4096);
    if($printBuffer===true){
            if(trim($buffer)=="======end==========="){
                    die();
            }
            echo $buffer;
    } elseif(trim($buffer)=='id:'.$section){
       $printBuffer=true;
       continue;
    } 
}
fclose($handle);
}

最好在Q的正文中显示您所需的输出。否则,我们必须猜测您是否也需要开始/结束标记。(你不是真的在做XML,是吗?你会后悔的!;-))。祝你好运。碰撞,因为如果已知截面长度(以直线表示),这是一个很好的解决方案