我想在块设备 (/dev/sdb) 上运行扫描以查找表达式“一些文本”并返回表达式的行“这是我找到的一些文本”。以及它的字节偏移量:
32768 - 这是我找到的一些文本。
我尝试使用grep -a --byte-offset "some text" /dev/sdb
,但遇到grep:line too long
错误。
我知道我的 LINE_MAX 是 2048,所以我想知道如何将该限制提高到任意大的值,或者在 PERL 中替换此函数?
谢谢!
未经测试,即使正确也可能不是最佳的:
#!/usr/bin/env perl
use autodie;
use strict;
use warnings;
{
use bytes;
open my $h, '<', '/dev/sdb';
my $offset = 0;
while (my $line = <$h>) {
while ($line =~ /ext?/g) {
printf "Line: %d\tByte: %d\n", $., $offset + $-[0];
}
$offset += length $line;
}
}