当文件包含回车符时,为什么 grep 打印出意外的输出?

当文件包含回车符时,为什么 grep 打印出意外的输出?

当我像这样运行 grep 时,我可以按预期看到匹配项:

$> echo -ne 'foo\nfoo\n' > file_a
$> grep -Hn foo file_a
file_a:1:foo
file_a:2:foo

但是当我创建一个包含回车符的文件时,grep 给出了意想不到的输出:

$> echo -ne '\x0dfoo\x0dfoo\nfoo\n' > file_b
$> grep -Hn foo file_b
fooe_b:1:
file_b:2:foo

谁能解释为什么它会给出这个输出?

答案1

这并不意外。回车将光标移动到行首。 已经打印出文件的名称和行号,并且匹配行的内容会覆盖它(由于该行的grep第一个之前和之后的回车)。foo

回车符也可以写成\r

printf '\rfoo\rfoo\nfoo\n' >file

这将创建一个包含两行的文件。第一行将包含该单词foo两次,但回车符会将光标移动到行的开头。如果使用查看此文件,它看起来好像第一行cat只有一个。foo

相关内容