Non*_*del 79 command-line bash
我们有 10 台装有某些版本的 Ubuntu 且只能远程访问的 PC。在对自定义软件进行一些升级时,我没有注意到某些脚本中的行尾是 Windows 版本 (CR+LF) 而不是 Unix 版本 (LF)。所以现在当我想启动脚本时,它给出了一个错误:
bash: /usr/local/bin/portsee: /usr/bin/python^M: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)
有没有办法从终端更改脚本中的所有行结尾。问题是我无法在这组 PC 上安装任何新软件。
hee*_*ayl 147
dos2unix
您可以使用dos2unix
专门为此设计的程序:
dos2unix file.txt
Run Code Online (Sandbox Code Playgroud)
将替换所有线路中的所有 CR,就地操作。
要将输出保存在不同的文件中:
dos2unix -n file.txt output.txt
Run Code Online (Sandbox Code Playgroud)
您可能需要先通过以下方式安装它:
sudo apt-get install dos2unix
Run Code Online (Sandbox Code Playgroud)
sed
或者您可以使用从行尾sed
替换所有 CR ( \r
):
sed -i.bak 's/\r$//' file.txt
Run Code Online (Sandbox Code Playgroud)
使用 option -i
,文件将被就地编辑,原始文件将备份为file.txt.bak
.
该sed
解决方案并非可移植到所有平台。它在 macOS 上对我不起作用,除非我这样做brew install gsed
并使用了gsed 's/\r$//'
.
对于无需安装任何东西即可在大多数地方使用的解决方案,我使用
tr -d '\r'
Run Code Online (Sandbox Code Playgroud)
为了就地编辑文件,我在擦除和覆盖原始文件之前在子 shell 中生成新数据:
echo "$(tr -d '\r' < file)" > file
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
120481 次 |
最近记录: |