将文件转换为最常见的行尾(Windows 系统,带有 Cygwin)

将文件转换为最常见的行尾(Windows 系统,带有 Cygwin)

我有一堆文件,其中很多文件有混合行尾(CRLF 或 LF)。我想编写一个脚本,遍历文件列表,并针对每个文件将文件转换为最常见的行尾。例如,如果文件1有 23 行以 LF 结尾,15 行以 CRLF 结尾,我想运行dos2unix上。如果文件2有 2 行以 LF 结尾,还有 16 行以 CRLF 结尾,我想运行unix2dos就可以了。有人知道如何计算文件中每种类型的行尾数吗?我尝试grep -c $'\r\n' FILE过从 Cygwin Bash 终端进行计算,但无论文件中的行尾类型如何,它都会匹配每一行。

答案1

我正在寻找的命令显然是:

grep -c $'\r$' FILE

这似乎仅匹配 Windows (CRLF) 行结尾。

答案2

这仅是部分答案,但这里有一个计算 \r 的小技巧:首先通过 hexdump 转换为 ascii 十六进制代码,然后计算“0D”(即 \r)的出现次数。

cat yadda | hexdump -v -e '/1 "%02X\n"' | grep 0D | wc -l 

可以对 0A (对于 \n) 执行相同操作,然后根据自己的逻辑选择要选择的那个。

相关内容