如何在 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”来解释控制字符的主要内容,如果未能解决你的问题,请参考以下文章