如何将DOS/Windows的换行符(CRLF)转换为Unix的换行符(LF)

19 浏览
0 Comments

如何将DOS/Windows的换行符(CRLF)转换为Unix的换行符(LF)

如何以编程方式(不使用 vi)将 DOS/Windows 换行符转换为 Unix 换行符?

在某些系统上,没有可用的 dos2unixunix2dos 命令。

如何使用诸如 sedawktr 等命令来模拟它们?

admin 更改状态以发布 2023年5月25日
0
0 Comments

使用:

tr -d "\r" < file

查看 这里 有关使用 sed 的示例:

# In a Unix environment: convert DOS newlines (CR/LF) to Unix format.
sed 's/.$//'               # Assumes that all lines end with CR/LF
sed 's/^M$//'              # In Bash/tcsh, press Ctrl-V then Ctrl-M
sed 's/\x0D$//'            # Works on ssed, gsed 3.02.80 or higher
# In a Unix environment: convert Unix newlines (LF) to DOS format.
sed "s/$/`echo -e \\\r`/"            # Command line under ksh
sed 's/$'"/`echo \\\r`/"             # Command line under bash
sed "s/$/`echo \\\r`/"               # Command line under zsh
sed 's/$/\r/'                        # gsed 3.02.80 or higher

使用 sed -i 进行原地转换,例如:sed -i 's/..../' file

0
0 Comments

你可以使用 tr 将 DOS 转换为 Unix;但前提是你的文件中 CR 字符只能作为 CRLF 字节对的第一个字节出现。这通常是这种情况。你可以使用:

tr -d '\015' UNIX-file

请注意,DOS-file 的名称与 UNIX-file 的名称不同;如果你尝试两次使用相同的名称,你将得到空文件。

你无法使用标准的 'tr' 进行相反的转换。

如果你知道如何在脚本中输入回车符 (control-Vcontrol-M 输入 control-M),那么:

sed 's/^M$//'     # DOS to Unix
sed 's/$/^M/'     # Unix to DOS

其中 '^M' 是控制字符 M。你还可以使用 bashANSI-C 引用 机制来指定回车符:

sed $'s/\r$//'     # DOS to Unix
sed $'s/$/\r/'     # Unix to DOS

但是,如果你需要经常这样做 (粗略地说,超过一次),最好安装转换程序 (如 dos2unixunix2dos,或者 dtouutod) 并使用它们。

如果你需要处理整个目录和子目录,你可以使用 zip

zip -r -ll zipfile.zip somedir/
unzip zipfile.zip

这将创建一个 zip 存档,将行结束符从 CRLF 更改为 CR。unzip 然后将转换后的文件放回原位置 (并逐个请求你去解压 - 你可以回答:全部都是 Yes)。感谢 @vmsnomad 指出了这一点。

0