带有行终止符(Mac 样式)的 ASCII 文本文件CR
需要转换为带有CRLF
行终止符(DOS/Windows 样式)。
搜索CR
后面没有LF
,并将其替换CR
为CRLF
。因此重复的命令不会破坏文件(带有CRCRLF
)。
我已经尝试过unix2dos
,但转换失败。
如何在没有 Python / vim 的情况下在基本 Arch Linux 控制台上转换此文件?
答案1
如果您安装该dos2unix
实用程序(将文件从 DOS 转换为 Unix 文本格式的实用程序),您还将获得mac2unix
和unix2dos
实用程序,分别执行从 Mac 文本文件到 Unix 文本文件格式以及从 Unix 到 DOS 的转换。然后,您可以结合mac2unix
使用unix2dos
Unix 文本作为中间格式,从 Mac 文本格式转换为 DOS 文本格式:
mac2unix myfile
unix2dos myfile
在同一个文件或一组文件上运行多次是安全的。
请注意,BusyBox(例如 Alpine Linux 上的)有一个内置的dos2unix
andunix2dos
命令,但没有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/529778和https://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\n
s之前运行该工具时放置在那里,或者如果原始输入中的 s 之后恰好有\n
s,\r
那么 - 不要这样做!