在块设备上返回字节偏移和行匹配表达式?

时间:2013-04-02 21:37:58

标签: linux perl grep

我想在块设备(/ 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中替换这个函数?

谢谢!

1 个答案:

答案 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;
        }
}