2016-12-29 83 views
0

如何使用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代码我可以编译为目标系统的二进制文件也可以。

+0

你可以使用类似'grep -c“\ r”$ i'的东西吗? –

+0

我想建议类似Walther的东西:'grep -l $'\ r'*'列出在'grep -L $'\ r'*'列出Unix文件时提交的Dos。 –

+0

'-c'建议在同一个文件的dos和unix版本上返回'90'。 – lissachen

回答

2

试试这个:

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

echo命令会产生CR-LF对,然后将grep的搜寻这些完全相符的字符,在DOS下的文本文件找到他们。我用busybox echo和grep测试过它,它工作。有可能编译不同功能的不同版本的busybox可能无法正常工作。

具有混合行结束符的文件将被检测为DOS。如果要确定是否有多少个DOS结尾与它具有多少个UNIX结尾,则可以使用-c来获得CR-LF对的计数,然后与总计行数wc -l进行比较。

如果你有二进制文件,你必须确定文件是文本还是二进制文件。