bash:记录文件的第一行并获取位置

| 我得到了一个非常大的文件,该文件的开头包含n行文本(n <1000),然后是一个空行,然后是许多无类型的二进制数据。 我想提取文本的前n行,然后以某种方式提取二进制数据的确切偏移量。 提取第一行很简单,但是如何获得偏移量呢? bash无法识别编码,因此仅计算字符数是没有意义的。     
已邀请:
grep有一个选项“ 0”来输出字节偏移量。 例:
$ hexdump -C foo 
00000000  66 6f 6f 0a 0a 62 61 72  0a                       |foo..bar.|
00000009
$ grep -b \"^$\" foo 
4:
$ hexdump -s 5 -C foo
00000005  62 61 72 0a                                       |bar.|
00000009
在最后一步中,我使用5而不是4来跳过换行符。 也可用于文件中的变音符号(äöü)。     
使用ѭ2find查找空行
grep -n \"^$\" your_file | tr -d \':\'
如果需要最后一个空行(即,如果文件的顶部在二进制填充开始之前可以包含空行),可以选择使用
tail -n 1
。 使用
head
获取文件的顶部。
head -n $num
    
您可能想使用hexdump或od这样的工具来检索二进制偏移量而不是bash。这是参考。     
Perl可以告诉您文件中的位置:
pos=$( perl -le \'
    open $fh, \"<\", $ARGV[0]; 
    $/ = \"\";  # read the file in \"paragraphs\" 
    $first_paragraph = <$fh>; 
    print tell($fh)
\' filename )
顺便说一句,我试图对此一口气
pos=$( perl -00 -lne \'if ($. == 2) {print tell(___what?___); exit}\' filename
什么是“当前文件句柄”变量?我在文档中找不到它。     

要回复问题请先登录注册