【问题标题】:Using cat as a conversion tool in Linux在 Linux 中使用 cat 作为转换工具
【发布时间】:2015-01-08 12:25:01
【问题描述】:

我正在开发嵌入式 Linux 2.6,并且我正在尝试获取一个能够读取文本文件的 shell 脚本,而不管其格式如何(UTF-8、UTF-16、ISO*、任何 EOL 格式)。我主要限于 Busybox 应用程序,但如果它提供了一个好的解决方案,我可以使用一些轻量级的开源代码。

现在,我知道一个完全通用的解决方案可能是不可能的,但是在研究这个问题时,我注意到 cat 似乎几乎可以正确打印文件内容,而不管格式如何。例如,如果我使用 UCS-2LE 格式的文件,输出如下所示:

# less test.txt
H@e@l@l@o@ @W@o@r@l@d@
# cat test.txt
Hello World

现在,我想我会使用 cat 来解决大多数情况。但是当我尝试这个时:

cat test.txt > test2.txt

test2.txt 中的格式还是一样的。

所以问题是:我可以以某种方式将 cat 输出存储在文件中吗?不是原始文件内容,而是什么猫实际上向我展示了?还是其他什么工具?我设法做到这一点的唯一方法是用鼠标复制 cat 的输出并将其复制到文件中,但这不是一个可行的解决方案,因为我想自动化该过程。

【问题讨论】:

    标签: embedded-linux cat file-conversion busybox


    【解决方案1】:

    iconv 是标准的 linux 字符集转换工具。将 ucs-2le 设置为输入格式,将 ascii 设置为输出应该可以解决问题。

    请参阅http://linux.die.net/man/1/iconv 了解更多信息。它是 GNU C 库的一部分。

    【讨论】:

    • 我知道iconv,但问题是我需要知道原始格式。在这种情况下,我并不总是知道。我对 cat 感兴趣的原因是它似乎能够在不了解格式的情况下正确显示文件内容,我想要这样的东西。
    • 啊,好吧,很棘手。 file 命令会有帮助吗?那应该能够识别文本的类型。
    • 我也许可以通过结合 file 和 iconv 来做一些事情,但问题是至少有一种格式显示为 unknown-8bit 或类似的东西。令人沮丧的是 cat 准确地向我展示了我想要的东西,但我无法以任何自动方式存储它。
    • 嗯 - 你确定 cat 做得正确,而不仅仅是忽略不可打印的字符吗?
    • cat,按照设计(没有命令行选项),只需将命令行文件按顺序复制到标准输出,无需修改。许多 shell 脚本依赖于这种行为。我无法解释为什么在您的测试中,它似乎正在改变格式。
    猜你喜欢
    • 2019-10-17
    • 2019-12-13
    • 1970-01-01
    • 2016-07-02
    • 2012-03-22
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2011-01-30
    相关资源
    最近更新 更多