从文本文件中删除^M字符的Shell命令

8
Possible Duplicate: 在Unix中删除回车符 我正在阅读由外部第三方生成的数据。我注意到文件中的ASCII文本与^M字符交织在一起,我相信^M是ASCII码中表示回车符但不带换行符的字符13。
是否有一条可以从该文件中去除^M字符的命令?
我的操作系统是Linux(Ubuntu)。
2个回答

16

你可以像这样使用sed:

sed -i.bak 's/^M$//' infile.txt

要输入^M,您需要先按下CTRL-V,然后再按下CTRL-M


谢谢。这就是我需要的全部内容。我猜infile.txt是要清理的文件,但不确定i.bak是什么,也许我会去看手册,除非你足够慷慨地解释一下..? - Homunculus Reticulli
@HomunculusReticulli:不客气。在sed中,“-i”标志用于对文件进行内联编辑,“-i.bak”用于将原始输入文件保存为“.bak”扩展名以进行安全措施。 - anubhava
-i.bak是GNU sed的扩展,意思是“原地修改文件,并备份原文件为.bak后缀”。不过,阅读手册仍然是一个好主意。 - Jonathan Leffler

9

或者

dos2unix infile.txt file2.txt ....

或者

man dos2unix 

for more details.


dos2unix 可以使用,但不幸的是它并不适用于所有的 Unix/Linux 版本。 - anubhava
我只有RH Linux的经验,但我认为所有版本的Linux都有dos2unix(有很多旧版Unix的经验!)。由于用户指定了Linux,我认为这是一个有用的建议。毕竟,并不是所有的sed都支持-i。感谢大家,祝好运。 - shellter
我的Mac上没有dos2unix可用,如果你注意到我的答案中-i是可选的。一个简单的sed 's/^M$//' infile.txt > output.txt也可以工作。 - anubhava
我在你的回答中没有看到“-i”是可选的。不是要争吵,只是要认识到在Unix中也有多种方法可以做到这一点;->祝大家好运。 - shellter
很明显,在sed中文本替换是由s/^M$//'处理的,而-i只是一个可选的方便快捷方式。 - anubhava
dos2unix现在可在macOS上使用... - jtlz2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接