我想在块设备(/ dev / sdb)上运行扫描以查找表达式“some text”并返回表达式的行“This is some text I found。”以及以字节为单位的偏移量:
32768 - 这是我发现的一些文字。
我尝试使用grep -a --byte-offset "some text" /dev/sdb
,但遇到了grep:line too long
错误。
我知道我的LINE_MAX是2048所以我想知道如何将这个限制提高到一些任意大的值,或者可能在PERL中替换这个函数?
谢谢!
答案 0 :(得分:3)
未经测试,即使是正确的,也可能是次优的:
#!/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;
}
}