如何将文件上的 CR 转换为 CRLF 行结尾?

如何将文件上的 CR 转换为 CRLF 行结尾?

带有行终止符(Mac 样式)的 ASCII 文本文件CR需要转换为带有CRLF行终止符(DOS/Windows 样式)。

搜索CR后面没有LF,并将其替换CRCRLF。因此重复的命令不会破坏文件(带有CRCRLF)。

我已经尝试过unix2dos,但转换失败。

如何在没有 Python / vim 的情况下在基本 Arch Linux 控制台上转换此文件?

答案1

如果您安装该dos2unix实用程序(将文件从 DOS 转换为 Unix 文本格式的实用程序),您还将获得mac2unixunix2dos实用程序,分别执行从 Mac 文本文件到 Unix 文本文件格式以及从 Unix 到 DOS 的转换。然后,您可以结合mac2unix使用unix2dosUnix 文本作为中间格式,从 Mac 文本格式转换为 DOS 文本格式:

mac2unix myfile
unix2dos myfile

在同一个文件或一组文件上运行多次是安全的。

请注意,BusyBox(例如 Alpine Linux 上的)有一个内置的dos2unixandunix2dos命令,但没有mac2unix命令。因此,在 BusyBox 系统上,您还需要安装该dos2unix软件包才能访问mac2unix.

答案2

Mac2dos 文件可以使用 perl 进行转换:

$ perl -pe 's/\r\n|\n|\r/\r\n/g' input-file.txt > output-file.crlf

或者内联:

$ perl -pi -e 's/\r\n|\n|\r/\r\n/g' file-to-convert

来源:https://stackoverflow.com/a/14155400/529778https://stackoverflow.com/a/6374360/529778

答案3

既然你问“如何在没有......的情况下在基本的 Arch Linux 控制台上转换这个文件” - 在每个 Unix 机器上的任何 shell 中使用任何 awk ,而无需安装任何东西,也无需将整个输入文件读取到内存中,这将转换所有 CR 到 CRLF:

awk -v RS='\r' -v ORS='\r\n' '1'

例如:

$ printf 'foo\rbar\r' | cat -ve
foo^Mbar^M$

$ printf 'foo\rbar\r' | awk -v RS='\r' -v ORS='\r\n' '1' | cat -ve
foo^M$
bar^M$

您还说过“因此重复的命令不会破坏文件(使用 CRCRLF)”,但我认为没有办法稳健地处理再次调用的命令,因为无法通过读取输入来判断其中是否有任何\r\ns之前运行该工具时放置在那里,或者如果原始输入中的 s 之后恰好有\ns,\r那么 - 不要这样做!

相关内容