计算换行符或回车符,但不同时计算两者

计算换行符或回车符,但不同时计算两者

如果我在 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'
}

相关内容