如何将Windows行结尾更改为Unix版

我们有10台PC和一些版本的Ubuntu,只有远程访问。 在对自定义软件进行一些升级时,我没有注意到某些脚本中的行结尾是Windows版本(CR + LF)而不是Unix版本(LF)。 所以现在当我想要启动脚本时,它会出错:

bash: /usr/local/bin/portsee: /usr/bin/python^M: bad interpreter: No such file or directory 

有没有办法从终端更改脚本中的所有行结尾。 问题是我无法在这组PC上安装任何新软件。

选项1: dos2unix

您可以使用dos2unix程序,它是专门为此设计的:

 dos2unix file.txt 

将替换所有线路中的所有CR,就地操作。

要将输出保存在其他文件中:

 dos2unix -n file.txt output.txt 

您可能需要先安装它:

 sudo apt-get install dos2unix 

选项2: sed

或者您可以使用sed替换行结尾的所有CR( \r ):

 sed -i.bak 's/\r$//' file.txt 

使用选项-i ,文件将就地编辑,原始文件将备份为file.txt.bak