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

时间:2016-12-29 19:40:04

标签: 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代码也可以。

1 个答案:

答案 0 :(得分:2)

尝试一下:

CREATE TABLE tblFolders
(
    FolderId int identity(1, 1),
    FolderName varchar(100), -- or whatever length that suits your needs
    FolderRole int, -- a foreign key to folder roles table
    FolderParentId int NULL-- a foreign key to reference the current table
    --- what ever else data you might need
) 

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

具有混合行结尾的文件将被检测为DOS。您可以使用grep -q `echo -e '\015'` $i && echo DOS 获取CR-LF对的计数,然后与-c的总行进行比较,如果您想确定它有多少个DOS结尾与它有多少个UNIX结尾。

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