去掉^M的几种方法

vim上经常会碰到中文显示不正常的现象,也就是传说中的乱码。搜索了一下,在
http://www.chinalinuxpub.com/bbs/showthread.php?t=45475
找到了一个解决办法。但是gbk编码的正常了,utf8的又不对了。于是稍微改了一点。
用户目录下创建.vimrc文件
加入
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8
set fileformats=unix
set encoding=prc
fileencodings中utf-8要在前面。

这样就能正常显示中文了。配合pietty,可以完全正常显示、编辑中文了。
 

几种去除^M的方法

1、 cat filename1 | tr -d "\r" > newfile

2、 sed -e "s/^V^M//" filename > outputfilename

3、vi: 用vi打开文件

1. 按ESC键

2. 输入 :%s/^M//g

确定 ^M是使用 "CTRL-V CTRL-M" 而不是字面上的 ^M。这个正则式将替换所有回车符前的 ^M为空($是为了保证^M出现在行尾)
4、一些linux版本有 dos2unix 程序,可以用来祛除^M

5、用vim

输入 :set notextmode

 

可惜,经过上面的处理以后,^M是不存在了,但是换行不成功。所有的东西都在一行上面,看着很费劲。这说明处理的时候文件缺少"\n",可以在替换的时候添加上即可:

cat filename | tr "\r" "\n" > newfile

<think>我们已经在之前的对话中了解了在VSCode中移除^M(即\r)的方法。现在用户询问在Linux中使用命令移除文件中的^M字符(即回车符\r)。根据用户提供的引用,其中提到了sed命令可以用来处理文本。我们可以使用sed命令来删除回车符\r。另外,^M在Linux中可以用转义字符表示为\r。因此,我们可以通过以下方式实现:方法1:使用sed命令删除文件中的\rsed-i's/\r//g'filename解释:-i选项表示直接修改文件(而不是输出到终端),'s/\r//g'表示全局替换,将所有的\r替换为空(即删除)。如果用户希望删除Windows换行符中的\r(保留\n),那么上述命令即可。方法2:如果用户想将DOS格式(\r\n)转换为Unix格式(\n),可以使用dos2unix命令(需安装):dos2unixfilename方法3:使用tr命令删除\r(注意:tr命令用于处理单个流,因此我们需要将结果重定向到新文件,再覆盖原文件):tr-d'\r'< filename>tempfile&&mvtempfilefilename然而,用户要求使用命令,且希望参考引用中的内容。在用户提供的引用[1]中,有关于sed删除空行等操作的例子,但没有直接提到删除^M。但我们可以借鉴其思路。注意:在命令行中,^M字符可以通过按Ctrl+V再按Ctrl+M来输入,但在sed命令中我们通常用转义字符\r来表示。根据用户需求,我们推荐使用sed命令,因为它直接修改文件,且是最常用的方式。另外,用户引用的[1]中也提到了find命令,我们可以结合find和sed来处理多个文件。例如,递归删除当前目录及子目录中所有.txt文件的^M字符:find.-typef-name"*.txt"-execsed-i's/\r//g'{}\;这样,就可以批量处理文件。因此,回答的结构如下:1.介绍问题本质:^M是回车符\r,在Linux中可以用sed等命令删除。2.提供单个文件的命令:sed-i's/\r//g'filename3.提供批量处理的命令:find...4.提醒:确保备份重要文件,因为-i选项会直接修改文件。另外,我们可以生成相关问题:相关问题:1.如何将Unix格式的换行符转换为Windows格式?2.如何使用find命令结合其他命令进行批量文本替换?3.在Linux中,如何查看文件中的不可见字符(如换行符、制表符等)?最后,在回答中引用用户提供的引用[1]中关于sed命令的部分。</think> ### 在Linux中移除文件中的`^M`字符 `^M`本质是Windows换行符中的回车符`\r`(ASCII 13),在Linux系统中显示异常。以下是几种高效的命令行解决方法: #### 1. 使用`sed`命令(推荐) ```bash sed -i 's/\r//g' filename # 删除所有^M字符 ``` 或完整转换文件格式: ```bash sed -i 's/\r$//' filename # 仅删除行尾的^M(保留换行符) ``` #### 2. 使用`tr`命令(流处理) ```bash tr -d '\r' < filename > newfile # 生成新文件 mv newfile filename # 替换原文件 ``` #### 3. 专业转换工具 ```bash dos2unix filename # 将Windows格式转Unix格式 unix2dos filename # 转回Windows格式(需安装工具) ``` #### 4. 批量处理多个文件 ```bash find . -type f -name "*.txt" -exec sed -i 's/\r//g' {} + # 递归处理所有txt文件 ``` #### 🔍 验证结果 ```bash cat -v filename # 显示不可见字符(^M会明确标出) hexdump -C filename # 16进制检查(0D为\r) ``` > **原理**:通过删除回车符`\r`(ASCII 13)保留换行符`\n`(ASCII 10),使文件符合Unix/Linux标准[^1]。转换前建议使用`cp filename filename.bak`备份。 ### 相关问题 1. 如何递归删除整个目录下的`^M`字符? 2. Linux和Windows换行符的本质区别是什么? 3. 如何在Vim中批量移除回车符? 4. `dos2unix`工具的安装和使用方法? 5. 如何让Git自动处理跨平台换行符问题? [^1]: `^M`异常源于Windows的`\r\n`与Unix的`\n`格式冲突,本质是文件编码差异问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值