如何确定文件的行尾
时间:2020-03-06 14:36:10 来源:igfitidea点击:
我有一堆(数百)应该以Unix行结尾的文件。我强烈怀疑其中一些具有Windows行结尾,并且我想以编程方式找出哪些行结尾。
我知道我可以跑步
flip -u
或者类似的脚本来转换所有内容,但我希望能够识别那些需要先更改的文件。
解决方案
Windows将char 13和10用于行尾,仅将unix用作其中之一(我不记得是哪一个)。因此,我们可以将char 13和10替换为char 13或者10(使用unix的一个)。
我们可以使用file
工具,它会告诉我们行尾的类型。或者,我们可以只使用dos2unix -U
,它将把所有内容转换为Unix行尾,而不管它以什么开头。
Unix使用一个字节0x0A(LineFeed),而Windows使用两个字节0x0D 0x0A(回车,换行)。
如果我们从未看到过0x0D,则很可能是Unix。如果看到0x0D 0x0A对,则很可能是MSDOS。
我们可以使用grep
egrep -l $'\r'$ *
类似于以下内容:
perl -p -e 's[\r\n][WIN\n]; s[(?<!WIN)\n][UNIX\n]; s[\r][MAC\n];' FILENAME
尽管某些正则表达式可能需要完善和整理。
每行末尾将使用WIN,MAC或者UNIX输出文件。如果文件某种程度上是一个可怕的混乱(或者差异)并且具有混合的结尾,那就很好了。