如何在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,是吗?你会后悔的!;-))。祝你好运。碰撞,因为如果已知截面长度(以直线表示),这是一个很好的解决方案