首先说下哈,相信有很多的小伙伴在利用linux处理文件的过程中,无缘无故的遇到异常,查半天才发现,原来有^M。
这是Windows风格的换行符,“晕到死”两行之间用0d 0a分隔,让人很讨厌,但这是有历史原因的。
话当年long long ago,那时候打印机是最古老的机械式,它打完一行之后,要做两件事:第一件事是让打印头从行尾移回到行头,那个移来移去的打印头,被人形象的称为“车”(carriage),“车”回到左边的过程,很自然的大家就称之为“回车”(Carriage Return)。第二件事是把纸向上移一行,这个过程叫Line Feed.所以在ASCII码表中,0d是CR,0a是LF.
这就是Windows下0d 0a的来历,可能Linux认为这个很笨很落伍,一个Line Feed就能直接弄出一个新行来嘛,所以Linux下一直用0a来代表新行。
首先,cat -A filename 就可以看到windows下的断元字符 ^M
要去除他,最简单用下面的命令:
dos2unix filename
第二种方法:
sed -i 's/^M//g' filename
#注意:^M的输入方式是 Ctrl + v ,然后Ctrl + M
第三种方法:
#vi filename
:1,$ s/^M//g
^M 输入方法: ctrl+V ,ctrl+M
第四种方法:
#cat filename |tr -d '\r' > newfile
#^M 可用 \r 代替
欢迎关注生信人