不要在我的终端中解释回车符 (`\0D`)

不要在我的终端中解释回车符 (`\0D`)

我经常需要grep在大型文本文件中使用特定的表达式。由于某种原因,私人供应商决定使用CR(回车符, \0D) 来分隔文本文件特定行上的参数。

然而,该CR字符由终端解释,使得 mygrepcat命令几乎毫无用处。

那么如何在终端上显示以下文件的内容(例如xterm-256color)。

$ hexdump /tmp/bla 
0000000 3031 3030 3020 0d20 3335 310d 3132 3830
0000010 300d 302e 3031 3030 0d30 0a33          
000001c

到目前为止,我尝试过但运气不佳:

$ TERM=dumb cat /tmp/bla 
3.010000

答案1

GNU cat 有一些选项可以帮助打印包含此类特殊字符的文件:

   -v, --show-nonprinting
          use ^ and M- notation, except for LFD and TAB

所以cat -v /tmp/bla应该根据你的情况这样做。或者甚至可能-et,它也以特殊的方式打印制表符和行尾。

答案2

更有用的可能是识别数据是十六进制的,并且 0xd 是回车符(\r^M)。有几种方法可以解决这个问题:

  • 问题说特定的线,并查看转储,这可能来自script,有人正在对文件进行编辑更改。在这种情况下,人们可能希望获得编辑更改的最终结果——全部在一行中。你可以使用col为此,例如

    col /tmp/bla

    虽然col没有想象中那么强大。 (我使用基于 vi-like-emacs 手册页过滤器的脚本来获取好的结果——但在我的回复中做了一个简单的脚本我可以使用 unix utils 以编程方式将 ANSI 控制代码“烧入”到文件中吗?您可能会发现它比col)更有用。

  • 话又说回来,OP 希望将其视为多行。为此,可以这样做(将回车符转换为换行符):

    tr '\r' '\n' </tmp/bla

顺便说一句,回车不是转义序列(尽管,就像任何字符,可以选择以 C 风格的“转义”格式表示它)。

相关内容