如何在 Linux 中制作“cat”来解释控制字符

Posted

技术标签:

【中文标题】如何在 Linux 中制作“cat”来解释控制字符【英文标题】:How to make 'cat' in Linux to interpret control characters 【发布时间】:2012-08-23 21:47:38 【问题描述】:

考虑以下回显命令:

 echo -e "at\r"

在命令行上产生输出at,即 \r 特殊字符已被解释。我想对文件中的一些文本做同样的事情。假设完全相同的序列

at\r

写入一个名为at.txt的文件,然后我想在终端上显示它。但是

cat at.txt

给出输出

at\r

什么不是我想要的。我希望解释特殊序列 \r ,而不仅仅是打印在终端上。有人知道吗?

谢谢 亚历克斯

【问题讨论】:

echo -e "$(cat file)" 有用吗? (对于小文件) 或者如果文件很大你可以试试 xargs:cat file | xargs echo -ne 第一个建议有效(knittl),第二个建议(Lee)产生一个字符串'atr'。 看来xargs 使用\ 作为特殊字符。要解决此问题,您可以告诉它不要:cat file | xargs --null echo -ne 【参考方案1】:

为什么不:

while read -r line; do echo -e $line; done < at.txt

【讨论】:

输出中缺少前导空格。我通过添加 "IFS=" 并用双引号将 $line 括起来解决了这个问题: while IFS= read -r line;做回声 -e "$line";完成 【参考方案2】:

你可以简单地:

echo -e $(cat at.txt)

【讨论】:

【参考方案3】:

内置的echo 命令解释常见的反斜杠转义。但是在文件中,您必须以类似的方式解释或转换它。 sed 程序可以做到这一点。

sed -e 's/\\r/\r/' < at.txt

但我也在这里学到了一些东西。外部echo 命令的行为与内部命令不同。

/bin/echo "\r"

输出不同于

echo "\r"

但基本上你需要一个过滤器来将文字 \r 字符串转换为单个字节 0x0D。

【讨论】:

这根本不正确……试试echo "\r"echo -e "\r"。如果是 shell,两个命令将输出相同的字符串。 外部回声的行为不同。而且 sh 的 echo 的行为也与 bash 的 echo 不同

以上是关于如何在 Linux 中制作“cat”来解释控制字符的主要内容,如果未能解决你的问题,请参考以下文章

如何在Linux中调整字符集为中文

Linux部分命令解释及使用

Linux命令之输出内容到控制台echo

Linux 中调整字符集

linux查看文件内容命令

每天一个Linux命令cat -E(5)