【发布时间】:2012-11-15 09:47:52
【问题描述】:
我正在读取由外部第三方生成的一些数据。我注意到文件中的 ASCII 文本中散布着 ^M 字符,我认为这是 ASCII 中的第 13 个字符,表示没有换行符的回车。
我可以使用一个衬里从文件中删除 ^M 字符吗?
我在 Linux (Ubuntu) 上运行。
【问题讨论】:
我正在读取由外部第三方生成的一些数据。我注意到文件中的 ASCII 文本中散布着 ^M 字符,我认为这是 ASCII 中的第 13 个字符,表示没有换行符的回车。
我可以使用一个衬里从文件中删除 ^M 字符吗?
我在 Linux (Ubuntu) 上运行。
【问题讨论】:
你可以像这样使用 sed:
sed -i.bak 's/^M$//' infile.txt
要输入^M,您需要输入CTRL-V,然后输入CTRL-M。
【讨论】:
-i 标志用于对文件进行内联编辑,-i.bak 用于保存原始输入文件,扩展名为.bak,以确保安全。
-i.bak 是 GNU sed 扩展名,意思是“就地更改文件,使用 .bak 扩展名备份原始文件”。不过,阅读手册仍然是个好主意。
或
dos2unix infile.txt file2.txt ....
或
man dos2unix
了解更多详情。
【讨论】:
dos2unix(很多老线 unix 经验!)。由于用户指定了 Linux,我认为这是一个有用的建议。毕竟并非所有seds 都支持-i ;-)。谢谢,祝大家好运。
-i 在我的回答中是可选的。一个简单的sed 's/^M$//' infile.txt > output.txt 也应该可以工作。
-i 在您的答案中是可选的。不是想打架。只是要认识到在 unix 中也有不止一种方法可以做到这一点 ;-> 。祝大家好运。
's/^M$//' 处理的,-i 只是一个可选且方便的快捷方式。