如何以编程方式(不使用vi)将DOS/Windows换行符转换为Unix换行符?
dos2unix和unix2dos命令在某些系统上不可用。 如何使用sed、awk和tr等命令模拟它们?
如何以编程方式(不使用vi)将DOS/Windows换行符转换为Unix换行符?
dos2unix和unix2dos命令在某些系统上不可用。 如何使用sed、awk和tr等命令模拟它们?
当前回答
这对我很有效
tr "\r" "\n" < sampledata.csv > sampledata2.csv
其他回答
使用AWK你可以做到:
awk '{ sub("\r$", ""); print }' dos.txt > unix.txt
使用Perl你可以做到:
perl -pe 's/\r$//' < dos.txt > unix.txt
这个问题可以用标准工具解决,但对于粗心的人来说,有很多陷阱,我建议您安装flip命令,这是20多年前由《zoo》的作者Rahul Dhesi编写的。 它在转换文件格式方面做得很出色,例如,避免了二进制文件的无意破坏,如果您只是到处更改您看到的每个CRLF,这有点太容易了……
在Linux上,使用sed很容易将^M (Ctrl + M)转换为*nix换行符(^J)。
在CLI中就像这样,文本中会有一个换行符。然而,\将^J传递给sed:
sed 's/^M/\
/g' < ffmpeg.log > new.log
你可以使用^V (Ctrl + V), ^M (Ctrl + M)和\(反斜杠)当你输入:
sed 's/^V^M/\^V^J/g' < ffmpeg.log > new.log
我试着
sed 's/^M$//' file.txt
在OS X以及其他一些方法(修复Dos行结束或http://hintsforums.macworld.com/archive/index.php/t-125.html)。没有一个工作,文件保持不变(顺便说一下,需要按Ctrl + V, Enter来重新生成^M)。最后我使用了TextWrangler。它不是严格意义上的命令行,但它可以工作,而且不会抱怨。
在Bash 4.2及更新版本中,您可以使用类似这样的方法来剥离后面的CR,它只使用Bash内置:
if [[ "${str: -1}" == $'\r' ]]; then
str="${str:: -1}"
fi