【发布时间】:2011-04-27 15:45:00
【问题描述】:
当我从 excel 在 windows 中保存 TSV 文件时,它使用 \r 或 \015(八进制)的行结尾,在 vi 中显示为 ^M。
当我从 excel 在 Mac 上保存 TSV 文件时,它使用 \r\n 或 \015\012(八进制)的行结尾,在 vi 中显示为 ^M。
如何在不添加额外空行但仍保持与 linux 兼容的行尾的情况下更改两个文件的行尾?
我目前在 PHP 中使用 exec() 来运行以下命令:
如果我使用:
cat {FILE} | tr -d "\015" > {NEW_FILE}
或
cat {FILE} | tr -d "\r" > {NEW_FILE}
适用于 Windows 文件,但 Mac 文件失败。 (删除所有行尾)
如果我使用:
cat {FILE} | tr "\015" "\012" > {NEW_FILE}
或
cat {FILE} | tr "\r" "\n" > {NEW_FILE}
适用于 Mac 文件,但 Windows 文件失败。 (创建空行)
任何想法如何在同一个例程中处理任何一个?
【问题讨论】:
-
试过 sed 吗?
sed -e 's/$/\r/' unix-format.txt > win-format.txt -
它适用于 Windows,但不适用于 Mac。我需要一个适用于任一文件的解决方案。
-
好吧,您可以尝试读取第一行 + 1 个字符的脚本,看看它是否以 \r 或 \r\n 结尾,然后在您自己的“转换器代码”中进行相应处理。像这样,您可以坚持使用纯 PHP 并且没有 3rd 方依赖项。
标签: php windows linux macos line-endings