为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕斯709654 2019-06-14 15:14:51
如何在BASH脚本中将DOS/Windows换行符(CRLF)转换为Unix换行符(LF)?如何以编程方式(即,不使用vi)将DOS/Windows新行转换为Unix?这个dos2unix和unix2dos命令在某些系统上不可用。我怎样才能用这样的命令来模仿这些sed/awk/tr?
查看完整描述

3 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

你可以用tr要从DOS转换到Unix,只有当CR仅作为CRLF字节对的第一个字节出现在您的文件中时,才能安全地执行此操作。通常情况是这样的。然后使用:

tr -d '\015' <DOS-file >UNIX-file

注意这个名字DOS-file与名字不同UNIX-file如果您尝试使用相同的名称两次,您将结束在文件中没有数据。

你不能反过来(用标准的“tr”)。

如果您知道如何输入马车,请返回到脚本中(控制-V控制-M若要输入Control-M),则:

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

其中‘^M’是控件-M字符。您还可以使用bash Ansi-C引用指定运输返回的机制:

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

但是,如果您需要经常这样做(粗略地说,不止一次),那么安装转换程序就更明智了。dos2unixunix2dos,或者也许dtouutod)并使用它们。


查看完整回答
反对 回复 2019-06-14
?
波斯汪

TA贡献1811条经验 获得超4个赞

tr -d "\r" < file

瞧一瞧这里例如使用sed:

# IN 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 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.


查看完整回答
反对 回复 2019-06-14
?
LEATH

TA贡献1936条经验 获得超6个赞

在POSIX中这样做是很棘手的:

  • POSIX SED不支持\r\15..即使它做到了,就地选项-i不是POSIX

  • POSIX Awk支持\r\15,但是-i inplace选项不是POSIX

  • d2u剂量2不是POSIX公用事业,但是

  • POSIX ex不支持\r\15\n\12

移除回程:

ex -bsc '%!awk "{sub(/\r/,\"\")}1"' -cx file

若要添加回车:

ex -bsc '%!awk "{sub(/$/,\"\r\")}1"' -cx file


查看完整回答
反对 回复 2019-06-14
  • 3 回答
  • 0 关注
  • 1870 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信