gpt4 book ai didi

php - 如何在 linux 中更改 windows 或 mac 文件的文件结尾?

转载 作者:可可西里 更新时间:2023-11-01 09:35:35 26 4
gpt4 key购买 nike

当我在 Windows 中从 excel 保存 TSV 文件时,它使用\r 或\015(八进制)的行结尾,这在 vi 中显示为 ^M。

当我在 Mac 上从 excel 保存 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 文件失败。 (创建空行)

有什么想法可以在同一例程中处理这两者吗?

最佳答案

我想我找到了解决这个问题的优雅方法。在我的 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");
}

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

关于php - 如何在 linux 中更改 windows 或 mac 文件的文件结尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5806818/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com