如何在 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 中回显文件的实际数据?我尝试过使用headcatmore 等,但所有这些似乎都与“打印格式”文本相呼应。例如:

$ 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 系统上回显/打印实际文件内容的主要内容,如果未能解决你的问题,请参考以下文章

如何理解 Unix/Linux 的文件系统?

我需要在另一个页面上回显从 mysql 填充的下拉选择

表单提交后如何在同一个html页面上回显?

如何从数据库中获取数据并在 php 页面上回显? [复制]

在unix文件系统中,inode节点包括哪些内容?

Unix系统编程()open,read,write和lseek的综合练习