【问题标题】:How can I determine line endings in an embedded environment?如何确定嵌入式环境中的行尾?
【发布时间】:2016-12-29 19:40:03
【问题描述】:

如何使用busybox版本的命令确定文本文件的行尾?

我的目标:列出目录中的文件以及它们是否具有 DOS 行结尾或 UNIX 行结尾。理想情况下,我希望在这样的某种循环中执行此操作:

for i in *; do
    **determineEndings** $i
done

find . -type f | **determineEndings**

不幸的是,由于我有 busybox 版本的命令,我没有可用的 file 命令来帮助我。我为我的目标系统找到了file 的二进制文件,并将magic 文件复制到file --version 告诉我的位置,但仍然收到以下错误:

$ file -d myfile.txt
unknown, 0: Warning: using regular magic file `/usr/share/misc/magic'
file: could not find any valid magic files!

我可以为目标环境编译 C 代码,所以我可以为目标系统编译为二进制的简单 C 代码也可以工作。

【问题讨论】:

  • 你能用grep -c "\r" $i之类的东西吗?
  • 我想提出类似 Walther 的建议:grep -l $'\r' * 列出 Dos 文件,grep -L $'\r' * 列出 Unix 文件。
  • -c 建议在我的同一文件的 dos 和 unix 版本上返回 90
  • -l 版本有效。谢谢
  • 其实我没有正确测试。这不起作用。

标签: c bash embedded-linux busybox line-endings


【解决方案1】:

试试这个:

grep -q `echo -e '\015'` $i && echo DOS

echo 命令将产生一个 CR-LF 对,然后 grep 将搜索那些确切的字符,在 DOS 文本文件中找到它们。我已经用busybox echo 和grep 对此进行了测试,它确实有效。有可能不同版本的busybox编译了不同的功能可能无法正常工作。

带有混合行尾的文件将被检测为 DOS。您可以使用 -c 获取 CR-LF 对的计数,然后与 wc -l 比较总行数,如果您想确定它有多少个 DOS 结尾与多少个 UNIX 结尾。

如果您有二进制文件,则必须以其他方式确定文件是文本文件还是二进制文件。

【讨论】:

    猜你喜欢
    • 2011-04-20
    • 2011-09-25
    • 2011-07-12
    • 2013-03-21
    • 2010-10-27
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多