我有一个非常大的文件,其中包含n行文本(n为<1000),一行为空行,然后是大量无类型二进制数据。
我想提取前n行文本,然后以某种方式提取二进制数据的确切偏移量。
提取第一行很简单,但我怎样才能得到偏移? bash不是编码识别的,所以只计算字符数是毫无意义的。
答案 0 :(得分:5)
grep有一个选项-b
来输出字节偏移量。
示例:
$ 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来跳过换行符。
也适用于文件中的变音符号(äöü)。
答案 1 :(得分:3)
使用grep
查找空行
grep -n "^$" your_file | tr -d ':'
如果您想要最后一个空行(也就是说,如果文件的顶部在二进制内容开始之前可以包含空行),则可以选择使用tail -n 1
。
使用head
获取文件的顶部。
head -n $num
答案 2 :(得分:1)
答案 3 :(得分:1)
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
什么是“当前文件句柄”变量?我在文档中找不到它。