【问题标题】:grep does not print filename of result for some files with special charactersgrep 不打印某些带有特殊字符的文件的结果文件名
【发布时间】:2017-03-06 06:09:13
【问题描述】:

我有这个带有特殊字符的特殊文件:

​
^S^H^B^R^MLong is here
^X^M

当我通过grep -r "Long is here" . 搜索它时,它会给我以下结果,而不是显示它的文件路径:

Long is here

但是,如果我删除^S^H^B^R^M,文件路径就会显示出来:

./CIQla:Long is here​

我正在使用 OSX。

这是怎么回事?


编辑:

我用 BSD grep (grep 2.5.1-FreeBSD) 和 GNU grep (ggrep 2.26) 都试过了

【问题讨论】:

  • 如果你也使用-H 来打印文件名呢?一般来说,grep 如果只有一个匹配项,则不会打印文件名。
  • -H option is default when there is more than one file to search... 我认为这些特殊字符正在覆盖 grep 输出中的字符
  • @fedorqui -H 不会显示文件路径,但 -l 会。但是,这些特殊字符如何阻止 grep 打印文件路径对我来说仍然是个谜……
  • 检查man grep -H 的工作原理,因为它确实显示了文件路径。 -l 所做的只是 显示路径。

标签: macos unix grep


【解决方案1】:

^M 是一个回车,它使终端返回到行首。本质上,它打印“./CIQla:”,然后是几个非打印字符,然后 ^M 将其发送到行首,然后它打印“Long is here”over“./CIQla: ”。

如果您希望能够在输出中看到文件名,您需要通过管道将结果通过将 ^M(可能还有其他非打印字符)转换为可打印的东西。试试这些:

grep -r "Long is here" . | cat -v
grep -r "Long is here" . | more

【讨论】:

  • grep ... | od -c真的使多余的字符可见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
相关资源
最近更新 更多