如何在 Linux 中更改 Windows 或 Mac 文件的文件结尾?

发布于 2024-11-03 09:07:36 字数 682 浏览 1 评论 0原文

当我从 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

篱下浅笙歌 2024-11-10 09:07:36

我想我找到了解决这个问题的优雅方法。在我的 PHP 脚本中,我创建了以下内容:

$results = exec("cd $directory; grep -Pl 

如果有人有改进,我愿意接受改进。

\r\n' $filename"); if($results == $filename) { // Windows File (default) exec("cd $directory; cat $filename | tr -d '\015' > $tmpfile; mv $tmpfile $filename"); } else { // MAC File exec("cd $directory; cat $filename | tr '\r' '\n' > $tmpfile; mv $tmpfile $filename"); }

如果有人有改进,我愿意接受改进。

I think I found an elegant solution for this problem. In my PHP script I created the following:

$results = exec("cd $directory; grep -Pl 

I am open to improvements if someone has one.

\r\n' $filename"); if($results == $filename) { // Windows File (default) exec("cd $directory; cat $filename | tr -d '\015' > $tmpfile; mv $tmpfile $filename"); } else { // MAC File exec("cd $directory; cat $filename | tr '\r' '\n' > $tmpfile; mv $tmpfile $filename"); }

I am open to improvements if someone has one.

骄兵必败 2024-11-10 09:07:36

dos2unix 用于 Windows 文件,mac2unix 用于 mac 文件。

dos2unix for windows files and mac2unix for mac files.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文