如何在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系统中的EOL值。