^M
字符。 这个
^M
字符是什么?它怎么会到达那里?
我如何摆脱它?
#1 楼
^M
是回车符。如果看到这种情况,则可能是在查看源自DOS / Windows世界的文件,其中的行尾由回车/换行符对标记,而在Unix世界中,则是行尾由一个换行符标记。带有不同的行结束标记。 /> :s/^M$//
(按Ctrl + V Ctrl + M插入该
^M
。)评论
尝试:%s / ^ M / \ r / g代替^ M并将^ M替换为换行符\ r。如果没有%,该命令仅适用于当前行。我遇到了一些示例,其中^ M不在行尾,例如第一行。^ M第二行。
–乔治
2015年4月14日4:29
或者,如果您不希望出现大量的换行符,则可以执行:%s / ^ M /
–carefulnow1
16年11月21日在8:52
如果它本身只是一个回车符,那可能是经典的(Unix前)Macintosh换行符。甚至由于某些原因,诸如Mac的Excel 2007之类的一些较新程序也会这样做。
– sudo
17-4-18在17:22
@larsks但是altap.cz/salamander/help/salamand/appendix_txtfiles表示^ M在UNIX中使用
– vivex
18-2-16在7:23
不知道它是否在我的vim配置中,但是我必须输入Ctrl + Q,然后按Ctrl + M才能生成该字符!
–布拉德公园
20年1月14日在19:59
#2 楼
一种更简单的方法是使用以下命令:dos2unix filename
该命令也适用于路径模式,例如
dos2unix path/name*
如果不起作用,请尝试使用其他模式:其中CONVMODE为以下之一:
-c
,其中ascii, 7bit, iso, mac
为默认值。评论
+1表示-c标志的默认值和其他选项。初次尝试时,默认设置没有预期的结果。使用dos2unix -c max可以正常工作。 dos2unix:将文件launch_me.sh转换为Unix格式...
–Johnny C
19/12/19在16:43
惊人的小实用程序。对于ubuntu,只需apt-get install dos2unix。如果您需要递归使用它,可以在这里参考以下解决方案:stackoverflow.com/questions/11929461/…我很愚蠢地在每个目录上手动运行它,并且只想查找事实。
–anon58192932
20年7月22日在5:36
#3 楼
这对我有用。 Vim会删除CRLF和仅LF的行尾,仅将每行的文本保留在缓冲区中。:e ++ff=dos
评论
谢谢!这对我有用,但可接受的解决方案没有
– 3pitt
18年5月30日在18:03
ff是指文件格式吗?那++ ff呢?
– KcFnMi
18年8月23日在18:10
:e ++ ff = dos命令告诉Vim再次读取文件,强制使用dos文件格式。 Vim将删除CRLF和仅LF的行尾,仅在缓冲区中保留每行的文本。
–Stryker
18年8月29日在20:05
要了解ff,请执行“:help ff”
– sqqqrly
20年1月22日在15:03
简单有效。我不确定为什么当文件1首先没有cat 1时>> file2引入dos换行
–算盘阅读器
20-4-23在12:09
#4 楼
大多数UNIX操作系统都有一个名为dos2unix
的实用程序,它将CRLF转换为LF。其他答案涵盖“他们是什么”问题。#5 楼
摆脱回车的另一种方法是使用tr
命令。我有一个小脚本,如下所示
#!/bin/sh
tmpfile=$(mktemp)
tr -d '\r' <"" >"$tmpfile"
mv "$tmpfile" ""
#6 楼
您可以使用sed
清理它:sed -e 's/^M$//' < infile > outfile
诀窍是如何正确进入回车位。通常,您需要输入
C-v C-m
来输入文字回车。您也可以使用sed -i.bak -e 's/^M$//' infile
来完成sed工作。
#7 楼
sed就地解决方案,无需键入特殊字符(您可以复制此字符并且它可以工作):sed -i -e "s/\r//g" filename
解释:
评论
注意,发问者已经在使用VIM编辑文件。自2012年以来,这里一直有sed答案。
– JdeBP
20 Mar 13 '20 at 10:50
是的,但是缺少一个有效的可行解决方案。现有的sed解决方案不能立即使用。
–DreamFlasher
20 Mar 14 '11:11
Dale Hagglund的就地sed无疑是开箱即用的。
– JdeBP
20 Mar 16 '20 at 10:09
好吧,不适合我。我正在使用Ubuntu LTS 18.04。
–DreamFlasher
20 Mar 16 '20在11:42
这帮助我从Windows桌面上的Alpine Linux上编辑了一个文件,该文件会将Ctrl M视为行返回,使上述答案无效。
– Zacran
20年8月13日在23:26
#8 楼
这是什么^ M?^ M是回车符。如果您看到此消息,则可能是在查看源自DOS / Windows世界的文件,其中的行尾由回车/换行对标记,而在Unix世界中,行尾由用一个换行符标记。
它怎么能到达那里?
文件格式发生变化时。
使用
vim -b FILE_PATH
打开文件用以下命令保存文件
:%s/^M//g
评论
您打开文件时遇到错字。
– Mateusz Piotrowski
16年1月27日在20:48
该答案不添加任何其他答案。第一段是已接受答案的几乎逐字记录的副本。给定的代码将不会保存任何内容,而只会删除所有行中的所有回车符。而且我不确定以二进制模式打开文件在这里是否有帮助。
–杜布
16年1月28日在7:58
#9 楼
就我而言,以上都不起作用,我将一个CSV文件从我的mac复制到Linux机器,并且使用了上面所有命令,但下面一个命令无济于事
tr "5" "\n" < inputfile > outputfile
我有一个文件,其中^ M个字符在下面的行之间被沙漏了
Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,
评论
mac2unix -n输入文件输出文件,或者等效地,dos2unix -c mac -n输入文件输出文件将处理这种情况。
–罗宾·米德(Robin A. Meade)
19/12/11在1:48
#10 楼
您可以在Ex模式下使用Vim: ex -bsc '%s/\r//|x' file
-b
二进制模式%
选择所有行s
替换\r
回车x
保存并关闭#11 楼
将以下行添加到〜/ .vimrccommand! Tounix :call Preserve('1,$s/^M//')
然后,当您拥有Windows行尾的文件时,运行命令“:Tounix”。
#12 楼
在过去,我什至看不到配置文件也无法正确解析并抱怨空白,但是如果您执行vi并执行设置列表,它将不会显示空白,grep文件名[[space]]将显示^ Mdos2unix file
可以提供帮助评论
这个答案不会带来新的东西,dos2unix至少在两个更古老的答案中已经提到过。
– Rui F Ribeiro
19年4月12日在14:06
评论
这是一个控制字符图,有关更多信息:help digraph-table。VS Code的底部有一个EOL选项,它将自动转换打开的文件。
使用VSCode时使用@StackUnderflow,在处理Linux文件时将行尾更改为LF很有帮助。我使用WSL ... Windows文件(例如$ profile)的Linux文件以LF结尾没有问题。也许Win在这里击败了Linux。