![如何将 Windows 行尾更改为 Unix 版本](https://linux22.com/image/1029168/%E5%A6%82%E4%BD%95%E5%B0%86%20Windows%20%E8%A1%8C%E5%B0%BE%E6%9B%B4%E6%94%B9%E4%B8%BA%20Unix%20%E7%89%88%E6%9C%AC.png)
我们有 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 gsed
gsed 's/\r$//'
对于大多数地方都可以使用而无需安装任何东西的解决方案,我使用
tr -d '\r'
为了就地编辑文件,我在子 shell 中生成新数据,然后擦除并覆盖原始文件:
echo "$(tr -d '\r' < file)" > file