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

如何将 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

选项1:dos2unix

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

dos2unix file.txt

将取代所有线路上的所有 CR,并投入运营。

要将输出保存到不同的文件中:

dos2unix -n file.txt output.txt

您可能需要先安装它:

sudo apt-get install dos2unix

选项 2:sed

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

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

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

答案2

该解决方案无法移植到所有平台。除非我使用 ,sed否则它在 macOS 上对我来说不起作用。brew install gsedgsed 's/\r$//'

对于大多数地方都可以使用而无需安装任何东西的解决方案,我使用

tr -d '\r'

为了就地编辑文件,我在子 shell 中生成新数据,然后擦除并覆盖原始文件:

echo "$(tr -d '\r' < file)" > file

相关内容