如何在Bash脚本中将DOS / Windows换行符(CRLF)转换为Unix换行符(LF)?

在Windows和Unix系统之间传输文件时,经常会遇到与行尾字符有关的问题。这是因为Windows中的EOL字符在Unix中未被识别为EOL字符。因此,要解决此问题,当文件从Windows传输到Unix时,我们需要遵循以下方法之一。

使用dos2unix

dos2unix命令用于将Windows平台的EOL字符转换为Unix平台。大多数Unix系统都预安装了此命令。下面我们看到使用此命令时如何转换文件本身或保存文件副本。

# change the file itself.
dos2unix file_name.txt
# Save a copy of the file.
dos2unix -n file_name.txt new_file_name.txt

使用sed

当我们将文件从Windows传输到Unix平台并打开以进行读取时,行尾字符显示为^ M(称为control-M)。因此,我们使用sed命令替换^ M个字符。在这里,我们还可以将编辑后的文件另存为新文件。

sed 's/^M$//' file_name.txt > new_file_name.txt

使用tr

tr命令用于翻译或删除字符。在这种情况下,如果打开后在unix系统中显示为“ \ r”,我们将使用它从Windows系统中删除文件中的行尾。

tr -d '\r' file_name.txt > new_file_name.txt

上面的命令成功执行后,我们可以在Unix系统中成功打开文件,而无需显示Windows系统中的EO L值。