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


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

使用 dos2unix

dos2unix 命令用于将 Windows 平台的 EOL 字符转换为 Unix 平台的 EOL 字符。大多数 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(称为控制-M)。因此,我们使用 **sed** 命令替换 ^M 字符。在这里,我们也可以将编辑后的文件另存为新文件。

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

使用 tr

tr 命令用于转换或删除字符。在这种情况下,我们将使用它来删除 Windows 系统文件中行尾字符,如果在 Unix 系统中打开时显示为 â\râ。

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

上述命令执行成功后,我们就可以在 Unix 系统中成功打开文件,而不会显示来自 Windows 系统的 EO L 值。

更新于: 2020年1月3日

2K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告