如何在 Linux 中更改 Windows 或 Mac 文件的文件结尾?
当我从 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 文件失败。 (创建空行)
有什么想法如何在同一例程中处理这两者吗?
When I save a TSV file in windows from excel, it uses the line ending of \r or \015 (octal) which shows up in vi as ^M.
When I save a TSV file on the Mac from excel, it uses the line ending of \r\n or \015\012 (octal) which shows up in vi as ^M.
How do I handle changing the line endings on both files without adding extra blank lines but still maintaining linux compatible line endings?
I am currently using exec() in PHP to run the following:
If I use:
cat {FILE} | tr -d "\015" > {NEW_FILE}
or
cat {FILE} | tr -d "\r" > {NEW_FILE}
Works for Windows files but Mac files fail. (removes all line endings)
If I use:
cat {FILE} | tr "\015" "\012" > {NEW_FILE}
or
cat {FILE} | tr "\r" "\n" > {NEW_FILE}
Works for Mac files but Windows files fail. (creates blank lines)
Any ideas how to handle either within the same routine?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我想我找到了解决这个问题的优雅方法。在我的 PHP 脚本中,我创建了以下内容:
如果有人有改进,我愿意接受改进。
I think I found an elegant solution for this problem. In my PHP script I created the following:
I am open to improvements if someone has one.
dos2unix 用于 Windows 文件,mac2unix 用于 mac 文件。
dos2unix for windows files and mac2unix for mac files.