0

我想在块设备 (/dev/sdb) 上运行扫描以查找表达式“一些文本”并返回表达式的行“这是我找到的一些文本”。以及它的字节偏移量:

32768 - 这是我找到的一些文本。

我尝试使用grep -a --byte-offset "some text" /dev/sdb,但遇到grep:line too long错误。

我知道我的 LINE_MAX 是 2048,所以我想知道如何将该限​​制提高到任意大的值,或者在 PERL 中替换此函数?

谢谢!

4

1 回答 1

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;
        }
}
于 2013-04-02T23:52:55.593 回答