【问题标题】:Shell command to strip out ^M characters from text file [duplicate]Shell命令从文本文件中删除^M个字符[重复]
【发布时间】:2012-11-15 09:47:52
【问题描述】:

可能重复:
Remove carriage return in Unix

我正在读取由外部第三方生成的一些数据。我注意到文件中的 ASCII 文本中散布着 ^M 字符,我认为这是 ASCII 中的第 13 个字符,表示没有换行符的回车。

我可以使用一个衬里从文件中删除 ^M 字符吗?

我在 Linux (Ubuntu) 上运行。

【问题讨论】:

    标签: regex linux awk sed grep


    【解决方案1】:

    你可以像这样使用 sed:

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

    要输入^M,您需要输入CTRL-V,然后输入CTRL-M

    【讨论】:

    • 谢谢。这就是我所需要的。我猜 infile.txt 是要清理的文件?,不确定 i.bak 是什么,也许,我会去看看手册,除非你足够亲切地解释..?
    • @HomunculusReticulli:不客气。 sed 中的-i 标志用于对文件进行内联编辑,-i.bak 用于保存原始输入文件,扩展名为.bak,以确保安全。
    • -i.bak 是 GNU sed 扩展名,意思是“就地更改文件,使用 .bak 扩展名备份原始文件”。不过,阅读手册仍然是个好主意。
    【解决方案2】:

    dos2unix infile.txt file2.txt ....
    

    man dos2unix 
    

    了解更多详情。

    【讨论】:

    • dos2unix 如果可用,则可以工作,但不幸的是,它不适用于所有版本的 Unix/Linux。
    • 我只有 RH linux 的经验,但我认为所有版本的 Linux 都有dos2unix(很多老线 unix 经验!)。由于用户指定了 Linux,我认为这是一个有用的建议。毕竟并非所有seds 都支持-i ;-)。谢谢,祝大家好运。
    • 例如 dos2unix 在我的 Mac 上不可用,如果您注意到 -i 在我的回答中是可选的。一个简单的sed 's/^M$//' infile.txt > output.txt 也应该可以工作。
    • 我没有看到 -i 在您的答案中是可选的。不是想打架。只是要认识到在 unix 中也有不止一种方法可以做到这一点 ;-> 。祝大家好运。
    • 很明显,sed 中的文本替换是由's/^M$//' 处理的,-i 只是一个可选且方便的快捷方式。
    猜你喜欢
    • 2015-11-21
    • 2011-09-25
    • 2018-11-09
    • 2021-12-23
    • 2013-10-24
    • 1970-01-01
    相关资源
    最近更新 更多