rvb*_*eto 6 command-line coreutils
我已经从 Ubuntu 18.04 中的 Common Crawl下载了一个warc 文件。使用 gzip 解压缩后,我尝试使用head
. 我第一次尝试:
head -c 29 CC-MAIN-20210620114611-20210620144611-00436.warc
Run Code Online (Sandbox Code Playgroud)
它产生了预期的结果,输出了文件的前 29 个字节:
WARC/1.0
WARC-Type: warcinfo
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用 30 而不是 29,则会产生我意想不到的结果:
head -c 30 CC-MAIN-20210620114611-20210620144611-00436.warc
Run Code Online (Sandbox Code Playgroud)
输出:
WARC/1.0
Run Code Online (Sandbox Code Playgroud)
这只是文件的前 10 个字节,而不是前 30 个字节。如果我使用head -c 31
,结果是预期的再次返回。我不知道这是否是一个错误,或者是否有我不知道的关于头部如何工作的细节。
ste*_*ver 17
该head
命令几乎肯定会输出请求的字节数,但是这些字节是什么会影响它们在终端中的显示方式。
具体来说,您的 gunzipped 文件几乎肯定具有 DOS 样式的 CRLF 行结尾,在字节 30 处为 CR,在字节 31 处为 LF。当您这样做时head -c29
,头部输出排除了两个行结尾字节,您会看到类似的内容
yourname@computer:~$ head -c29 file.warc
WARC/1.0
WARC-Type: responseyourname@computer:~$
Run Code Online (Sandbox Code Playgroud)
您的 shell 提示符紧跟在第 29 个字节之后。当你这样做时head -c31
,你捕获了 CR 和 LF,输出看起来像
yourname@computer:~$ head -c31 file.warc
WARC/1.0
WARC-Type: response
yourname@computer:~$
Run Code Online (Sandbox Code Playgroud)
但是,当您这样做时head -c30
,输出包含终止 CR 但不包含其后面的 LF - 光标被发送回位置 0,但留在终端的同一行上,然后它会被您的 shell 提示覆盖:
yourname@computer:~$ head -c31 file.warc
WARC/1.0
yourname@computer:~$
Run Code Online (Sandbox Code Playgroud)
如果该行比您的提示长,您将看到文件中的字符从末尾向外窥视。如果您的PS1
提示为空,那么您将看到完整的预期输出。