如何在 Unix 系统上回显/打印实际文件内容
Posted
技术标签:
【中文标题】如何在 Unix 系统上回显/打印实际文件内容【英文标题】:How to echo/print actual file contents on a unix system 【发布时间】:2018-12-19 17:03:43 【问题描述】:我想查看实际的文件内容,而不是格式化打印。例如,显示:
\n0.032,170\n0.034,290
代替:
0.032,170
0.34,290
是否有命令在 bash 中回显文件的实际数据?我尝试过使用head
、cat
、more
等,但所有这些似乎都与“打印格式”文本相呼应。例如:
$ cat example.csv
0.032,170
0.34,290
如何打印文件中的实际字符?
【问题讨论】:
\n
不是文件中的“实际字符”。它是用于显示特定八位字节的字符串表示形式。
hexdump
和它的一些格式化选项或简单的hd
可能会帮助你
cat -A file
会告诉你一些东西。 less -U
也不过少。
【参考方案1】:
这看起来好像你错过了理解“文件中的实际字符”是什么。您不会在该文件中找到字符 \
和 n
。但只有一个换行符,这是一个特定的字符。所以像 cat 这样的实用程序实际上确实输出了文件中的字符。
反过来说:如果文件中确实有这两个字符,那么像 cat 这样的实用程序实际上会输出它们。我刚刚检查过,只是为了确定。
如果您使用十六进制编辑器打开文件,您可以轻松地自行检查。在那里你会看到字符 0A(十进制 10),它是一个换行符。您将不会在该文件的某处看到\
和n
这两个字符对。
许多编程语言和 shell 环境在字符串定义中使用像 \n
这样的转义序列,并将它们标识为控制字符,否则将无法输入。所以也许这就是你的印象来自于你的文件应该包含这两个字符。
【讨论】:
这是我在 python 中要做的,例如,以二进制模式打开它:>>> open('example.csv','r+b').read() b'distance,recession_velocity\r\n# not a row,\r\n0.032,170\r\n0.034,290\r\n0.214,-130\r\n0.263,-70\r\n0.275,-185\r\n0.275,-220\r\n0.4,200\r\n0.5,290\r\n0.5,270\r\n0.6,200\r\n0.8,300\r\n0.9,-30\r\n0.9,650\r\n0.9,150\r\n0.9,500\r\n1,920\r\n1.1,450\r\n1.1,500\r\n1.4,500\r\n1.7,960\r\n2,500\r\n2,850\r\n2,800\r\n2,1090\r\n# Total,527'
是的,这就是我上一段的意思。您在那里定义一个被解释的字符串。实际在字符串中定义的不是反斜杠和字母的序列,而是解释器从该控制序列中生成的内容。
按照我的建议,尝试使用 hexeditor 检查自己。 Okteta
不错,但也有很多。
不太清楚“打印二进制数据”是什么意思。文件包含一个字符序列。这就是像cat
这样的实用程序的输出。文件内的“二进制数据”和“普通数据”没有区别。这是一个数据在某些环境中如何解释的问题,这些环境以一种或另一种方式解释或不解释某些控制序列。但这不是文件本身的一个特性。它只包含字符,它只是一个文件。
@David542 如果您发现用 C 转义序列替换换行符有助于解析 CSV 文件,那么您正在做一些非常奇怪的事情,可能会大大简化。【参考方案2】:
要将换行符显示为\n
,您可以尝试:
awk 1 ORS='\\n' input-file
这不是“文件中的实际字符”,因为\n
只是显示换行符的常规方法,但这似乎是您想要的。
【讨论】:
以上是关于如何在 Unix 系统上回显/打印实际文件内容的主要内容,如果未能解决你的问题,请参考以下文章