我有一堆文件,其中很多文件有混合行尾(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) 执行相同操作,然后根据自己的逻辑选择要选择的那个。