如果我在 Mac 文件上执行此操作,我会得到正确的行数,但在 unix 文件上我会得到双倍的行数:
cat /path/to/file.txt | tr '\r' '\n' | wc -l
如果我在 unix 文件上执行此操作,我会得到正确的行数,但在 Mac 文件上却得到零行:
cat /path/to/file.txt | wc -l
无论文件系统来源是什么(Linux、Mac、Windows),如何在单个命令中获取正确的行数?
答案1
我建议检查您正在处理的文件所使用的换行样式。
$ od -t x1z
将以十六进制字节和“ASCII”打印文件内容,查找 0A 和 0D 字节。
我有一个在 ~/.profile/ 或 ~/.bashrc 中定义的 bash 函数来帮助解决此类问题:
函数 od-crlf { #DOC echo "od-crlf FILE - 以十六进制显示文件内容,并强调 CR+LF 字符" od-Ax-t x1z-w32 $@ \ | sed -re 's/(0a)/\x1b[44m\1\x1b[m/g;s/(0d)/\x1b[45m\1\x1b[m/g' }