c - 如何确定嵌入式环境中的行尾?

标签 c bash embedded-linux busybox line-endings

如何使用 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 -q `echo -e '\015'` $i && echo DOS

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

具有混合行结尾的文件将被检测为 DOS。您可以使用 -c 来计算 CR-LF 对的数量,然后如果您想确定有多少 DOS 结尾与如何它有许多 UNIX 后缀。

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

关于c - 如何确定嵌入式环境中的行尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41386184/

相关文章:

python - 通过模式匹配从多个文件中提取行并将其写入Linux中的另一个文件

linux - 在 linux 文件中,如何打印一列中最大的 20 个数字?

Linux 为 DECLARE_WORK 中的函数传递参数

有人能帮我解释一下这行代码的含义吗?

java - TInyOS 1.x 编译 BLINK 时产生错误

c - c中执行错误: "Segmentation fault (core dumped)"

audio - 嵌入式系统 CORE9G25 上的 alsa

C比较char和int

c++ - QProcess 返回退出代码 0

在 Linux 中使用 C 控制 PWM 设备