【问题标题】:How to make 'cat' in Linux to interpret control characters如何在 Linux 中制作“cat”来解释控制字符
【发布时间】: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

标签: linux escaping echo cat


【解决方案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 不同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多