windows - 如何将 DOS/Windows 换行符 (CRLF) 转换为 Unix 换行符

如何以编程方式(不使用 vi)将 DOS/Windows 换行符转换为 Unix 换行符?

dos2unixunix2dos 命令在某些系统上不可用。
如何使用 sedawktr 等命令模拟它们?

最佳答案

您可以使用 tr 将 DOS 转换为 Unix;但是,只有当 CR 仅作为 CRLF 字节对的第一个字节出现在您的文件中时,您才能安全地执行此操作。通常是这种情况。然后你使用:

tr -d '\015' <DOS-file >UNIX-file

请注意,DOS-file 的名称与 UNIX-file 的名称不同;如果您尝试使用相同的名称两次,则最终文件中将没有数据。

你不能反其道而行之(使用标准的 'tr')。

如果你知道如何在脚本中输入回车(control-Vcontrol-M进入control-M),那么:

sed 's/^M$//'     # DOS to Unix
sed 's/$/^M/'     # Unix to DOS

'^M' 是 control-M 字符。也可以使用 bash ANSI-C Quoting 机制来指定回车:

sed $'s/\r$//'     # DOS to Unix
sed $'s/$/\r/'     # Unix to DOS

但是,如果您必须经常这样做(粗略地说不止一次),安装转换程序(例如 dos2unixunix2dos ,或者可能是 dtouutod )并使用他们。

如果需要处理整个目录和子目录,可以使用zip:

zip -r -ll zipfile.zip somedir/
unzip zipfile.zip

这将创建一个 zip 存档,其中行尾从 CRLF 更改为 CR。 unzip 然后会将转换后的文件放回原处(并逐个文件询问您 - 您可以回答:Yes-to-all)。感谢@vmsnomad 指出这一点。

关于windows - 如何将 DOS/Windows 换行符 (CRLF) 转换为 Unix 换行符 (LF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2613800/

相关文章:

python - 如何使用 matplotlib 在 while 循环中实时绘图?

linux - 使用 openssl 从服务器获取证书

list - 连接两个列表 - '+=' 和 extend() 之间的区别

python - 从字符串创建 Pandas DataFrame

python - 在 Python 中的同一行上打印多个

python - Python中的抽象方法

linux - 不会分配伪终端,因为 stdin 不是终端

linux - 使用 sed 删除空行

linux - "#!/usr/bin/env bash"和 "#!/usr/bin/bash"有什

python - Flask 可以有可选的 URL 参数吗?