如何以编程方式(即不使用vi)将DOS/Windows新行转换为Unix
dos2unix和unix2dos命令在某些系统上不可用。如何使用诸如sed、awk和tr之类的命令来模拟这些命令
您可以使用tr从DOS转换到Unix;但是,只有当CR仅作为CRLF字节对的第一个字节出现在文件中时,才能安全地执行此操作。通常情况就是这样。然后使用:
tr-d'\015'<;DOS文件>;UNIX文件
请注意,名称DOS文件与名称UNIX文件不同;如果您尝试两次使用相同的名称,则文件中将没有数据
你不能反过来做(使用标准的“tr”)
如果您知道如何在脚本中输入回车(control-V,control-M以输入control-M),则:
sed的/^M$/'\DOS到Unix
sed的/$/^M/#Unix到DOS
其中“^M”是control-M字符。您还可以使用bashANSI-C报价机制指定回车:
sed$'s/\r$/'#DOS to Unix
sed$'s/$/\r/'#Unix到DOS
但是,如果您必须经常这样做(粗略地说不止一次),那么安装转换程序(例如dos2unix和unix2dos,或者dtou和utod)并使用它们更为明智
如果需要处理整个目录和子目录,可以使用zip:
zip-r-ll zipfile.zip somedir/
解压缩zipfile.zip
这将创建一个zip存档,行尾从CRLF更改为CR。unzip然后将转换后的文件放回原位(并逐个文件询问您-您可以回答:全部是)。感谢@vmsnamad指出了这一点