在vim中去掉^M


  在windows下编辑程序之后,在vim中编辑,很多行会出现^M,这着是非常的讨厌。 所以决定干掉它。

下面是网上截取的资料:

Windows系统的换行符为\r\n,而Linux/Unix系统则为\n,因此,在Windows里编辑过的文本文件到了Linux/Unix里,每一行都会多出一个^M。
可以在Vim里用以下命令清除该字符:

:%s/\r//g

or

:%s/^M//g

注:命令中的^M 是通过键入<ctrl-v><enter><ctrl-v><ctrl-m>生成的。

天下文章一大抄啊。

转自:http://hi.baidu.com/zht7216/item/b3e796f454d73b1da7298859

<think>好的,我需要帮助用户解决Linux文件中出现的^M符号问题。用户已经知道可以用dos2unix命令或sed替换,但可能需要更详细的步骤和注意事项。首先,我得回忆相关知识,并参考提供的引用内容。 根据引用[1],^M是通过Ctrl-V和Ctrl-M生成的,不是直接输入^和M。这可能让用户误解如何正确输入命令。另外,dos2unix虽然常用,但有时可能不适用,如引用[2]提到的特殊情况,这时候需要用其他方法。 接下来,我需要整理解决方法。首先推荐dos2unix,因为它简单有效,如引用[3]所述。然后,如果用户没有这个工具,或者需要手动处理,可以用sed命令,像引用[4]中的例子那样,用sed -i 's/\r//' filename。不过要注意转义字符的正确使用,可能需要用\r还是^M。 还要提醒用户注意,在sed命令中如何输入^M字符。根据引用[1],应该在命令行中按Ctrl-V再按Ctrl-M,这样才会生成正确的单个字符。如果直接输入^和M,会被当作两个字符,无法正确替换。 另外,可能需要解释为什么会出现^M,这是因为Windows和Linux的换行符不同,Windows是\r\n,而Linux是\n,所以多余的\r显示为^M。处理时要去掉\r。 可能的问题还有,处理后的文件权限是否变化,是否需要备份。使用sed的-i选项可以直接修改文件,但最好先备份。或者使用重定向,如cat filename | tr -d '\r' > newfile。 最后,生成相关问题要考虑用户可能遇到的后续疑问,比如其他替换方法、不同工具的区别、如何预防等。</think>### 如何去除Linux文件中的^M字符? **^M字符的成因** ^M是Windows换行符`\r\n`中的`\r`(回车符)在Linux中的显示形式,而Linux仅使用`\n`(换行符)。当Windows文件在Linux中打开时,多余的`\r`会显示为`^M`[^2][^4]。 --- ### **解决方法** #### 1. 使用`dos2unix`命令(推荐) ```bash dos2unix filename # 直接修改文件 dos2unix -n inputfile outputfile # 生成新文件,保留原文件 ``` - **适用场景**:文件编码为ASCII或UTF-8的文本文件。 - **注意事项**: - 若系统未安装`dos2unix`,需通过包管理器安装(如`apt install dos2unix`或`yum install dos2unix`)[^3]。 - 该命令会直接覆盖原文件,建议提前备份。 --- #### 2. 使用`sed`命令(通用方法) ```bash sed -i 's/\r//g' filename # 直接删除所有\r字符 ``` 或显式匹配`^M`(需通过`Ctrl-V`+`Ctrl-M`输入^M): ```bash sed -i 's/^M//g' filename # ^M需手动按Ctrl-V Ctrl-M输入 ``` - **参数说明**: - `-i`:直接修改文件内容。 - `s/old/new/g`:全局替换。 - **注意事项**: - 直接输入`^`和`M`字符无效,必须通过`Ctrl-V`+`Ctrl-M`生成`^M`符号[^1][^4]。 --- #### 3. 使用`tr`命令(删除所有回车符) ```bash tr -d '\r' < inputfile > outputfile # 生成新文件 ``` - **适用场景**:处理二进制文件或需要保留原文件时。 --- #### 4. 使用Vim编辑器Vim中执行替换: ```vim :%s/^M//g # ^M需按Ctrl-V Ctrl-M输入 :wq # 保存并退出 ``` --- ### **注意事项** 1. **备份文件**:使用`-i`参数或直接覆盖操作前,建议备份原文件。 2. **编码问题**:若文件包含特殊编码(如GBK),需确保工具兼容性。 3. **批量处理**:可结合`find`命令批量处理目录下的文件: ```bash find . -type f -name "*.txt" -exec dos2unix {} \; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值