当我像这样运行 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