如何以编程方式(不使用vi)将DOS/Windows换行符转换为Unix换行符?
dos2unix和unix2dos命令在某些系统上不可用。 如何使用sed、awk和tr等命令模拟它们?
如何以编程方式(不使用vi)将DOS/Windows换行符转换为Unix换行符?
dos2unix和unix2dos命令在某些系统上不可用。 如何使用sed、awk和tr等命令模拟它们?
当前回答
作为Jonathan Leffler的Unix to DOS解决方案的扩展,当你不确定文件当前的行结束符时,可以安全地转换为DOS:
sed '/^M$/! s/$/^M/'
这将在转换为CRLF之前检查该行是否已经在CRLF中结束。
其他回答
作为Jonathan Leffler的Unix to DOS解决方案的扩展,当你不确定文件当前的行结束符时,可以安全地转换为DOS:
sed '/^M$/! s/$/^M/'
这将在转换为CRLF之前检查该行是否已经在CRLF中结束。
我试着
sed 's/^M$//' file.txt
在OS X以及其他一些方法(修复Dos行结束或http://hintsforums.macworld.com/archive/index.php/t-125.html)。没有一个工作,文件保持不变(顺便说一下,需要按Ctrl + V, Enter来重新生成^M)。最后我使用了TextWrangler。它不是严格意义上的命令行,但它可以工作,而且不会抱怨。
这个问题可以用标准工具解决,但对于粗心的人来说,有很多陷阱,我建议您安装flip命令,这是20多年前由《zoo》的作者Rahul Dhesi编写的。 它在转换文件格式方面做得很出色,例如,避免了二进制文件的无意破坏,如果您只是到处更改您看到的每个CRLF,这有点太容易了……
安装dos2unix,然后就地转换文件
dos2unix <filename>
将转换后的文本输出到不同的文件使用
dos2unix -n <input-file> <output-file>
你可以在Ubuntu或Debian上安装它
sudo apt install dos2unix
或者在macOS上使用Homebrew
brew install dos2unix
sed -i.bak --expression='s/\r\n/\n/g' <file_path>
因为问题中提到了sed,所以这是使用sed实现此目的的最直接的方法。该表达式表示仅用换行符替换所有换行符和换行符。这就是你从Windows到Unix所需要的。我验证过了。