Linux下文本文件中^M 符号问题的解决

关于回车与换行,有些人就认定没必要用两个字符来表示行尾。UNIX 开发者决定他们可以用一个字符来表示行尾,Linux沿袭Unix,也是。Apple 开发者规定了用.开发
MS-DOS以及Windows 的那些家伙则决定沿用老式的.

三种行尾格式如下:

unix : n

dos : rn

mac : r

这意味着,如果你试图把一个文件从一种系统移到另一种系统,那么你就有换行符方面的麻烦。

因为MS-DOS及Windows是回车+换行来表示换行,因此在Linux下用Vim查看在Windows下写的代码,行尾后“^M”符号。 www.2cto.com

在vi中解决这个问题,很简单,在vi中利用替换功能就可以将“^M”都删掉,键入如下替换命令行:

:%s/^M//g  或者  :%s/^M   这两个效果是一样的,

注意:

上述命令行中的“^M”符,不是“^”再加上“M”,而是由“Ctrl+v”、“Ctrl+M”键生成的,或者Ctrl+v,再按回车。

或者使用这个命令:

:% s/r//g

可以用以下方法快速的解决:

 

解决方法1:
在命令模式下:输入:%s/^M//g 然后,回车即可替换

注,其中"^M"的输入,分别是“Ctrl+v”、“Ctrl+M”键生成的

 

解决方法2: 

使用vi打开文本文件
    vi dos.txt
    命令模式下输入
    :set fileformat=unix
    :w

解决方法3:

使用sed 工具
    sed ’s/^M//’ filename > tmp_filename

解决方法4:

既然window下的回车符多了‘\r’,那么当然通过删除‘\r’ ,也可以实现:
    tr -d '\r'

解决方法5(最常用的方法)

    在终端下敲命令:
    $ dos2unix filename
    直接转换成unix格式,就OK了!~

解决方法6:

把代码用Notepad++打开,然后新建一个文件,把这个代码复制过去就OK了,当新建一个文件时候,Notepad++会自动解决回车换行等问题。

时间: 2024-08-02 04:11:05

Linux下文本文件中^M 符号问题的解决的相关文章

Linux下shell中case命令详解

  linux下shell中的case名字和C/C++中的switch类似,但是shell中的case更强大和复杂. 1.强大主要体现在:shell中case中的关键字可以是字符串类型,而每一项中可以包含正则表达式. 2.复杂主要体现在:shell中case的每一个项后有三个选择:break(常规的break).unconditional follow up(无条件继续)和conditional follow up(有条件继续). 这篇文章的重点是上面的第2点. case的无条件继续和有条件继续

人脸识别-linux下qt中opencv打开摄像头HIGHGUI ERROR:OpenCV Error:

问题描述 linux下qt中opencv打开摄像头HIGHGUI ERROR:OpenCV Error: 我在Ubuntu下用qt结合opencv做一个人眼状态识别的程序,qt做界面,程序在vs控制台环境下已经可以运行,但是qt下出错.错误信息 如下: HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file /home/mkc/op

win7 eclipse hadoop-win7下eclipse开发虚拟机linux 下hadoop中的问题

问题描述 win7下eclipse开发虚拟机linux 下hadoop中的问题 本人心血来潮买了hadoop权威指南第二版学习hadoop. linux虚拟机下安装了伪分布模式下的hadoop_0.20.2版本.进过多方努力发现了eclipse的版本3.3才能使用自带的hadoop插件.又经过多方努力在win7的eclipse下成功的完成了wordcount的测试程序.中间一堆错误. 现在想测试maxtemperature确保了以前的错误,不明白这是什么原因.现将错误内容贴出,忘大神不吝赐教.

linux下gedit中不能输入中文

问题描述 linux下gedit中不能输入中文 如题 求大神解答 输入只能是字母 可我想输点汉字啊... 解决方案 gedit 可输入中文的文本编辑器myeclipse在linux下不能输入中文 解决方案二: gedit本身是支持中文的,是不是你的输入法有什么问题,换个输入法试试 解决方案三: 应该是能支持的,linux原生支持unicode的.看看是不是输入法问题,或者首选项里的设置问题. 解决方案四: http://wiki.ubuntu.com.cn/Gedit%E4%B8%AD%E6%9

linux下SVN中改变执行权限

SVN中,如果我们在linux下提交权限为755的文件,就会在svn的属性中存在一个svn:excuteable. 只在本地chmod 644 filename.php,是不能造成修改的. 可以在windows下的svn客户端中,通过修改该文件的属性,Remove掉它的这个可执行属性. Remove之后会重新进行一次commit操作,所以还会弹出让你填写一点备注的输入框. 所以可以看出,svn中保存文件并没有储存属主和类似755这样的权限,只在如果有可执行权限时,checkout和update时

Linux下多线程中的信号处理详解教程

在linux下,每个进程都有自己的signal mask,这个信号掩码指定哪个信号被阻塞,哪个不会被阻塞,通常用调用sigmask来处理.同时每个进程还有自己的signal action,这个行为集合指定了信号该如何处理,通常调用sigaction来处理. 使用了多线程后,便有些疑问: 信号发生时,哪个线程会收到是不是每个线程都有自己的mask及action每个线程能按自己的方式处理信号么 首先,信号的传递是根据情况而定的: 如果是异常产生的信号(比如程序错误,像SIGPIPE.SIGEGV这些

Linux下文件移动问题的排查及解决(以C代码为例)

问题描述 某软件具有的功能之一是将Linux下的某个源路径下的文件移动(剪切)到目的路径下.在软件运行之前,只有源路径可能是存在的,源路径下面没有子目录,只可能会有普通的文本文件. 在软件运行起来之后,发现在Linux屏幕上经常出现如下信息: mv: cannot stat `/home/zhou/zhouzx/Test/FileMove/SrcDir/*': No suchfile or directory 程序源代码及问题分析 我们查看了程序中实现该功能的源代码,如下所示: /*******

linux下网站提示“Too many connections”的解决方法

MySQL 服务的配置:修改 MySQL 配置文件(Windows下为 my.ini, Linux下为 my.cnf )中的参数: 解决办法修改php.ini参数为 [MySQL]  代码如下 复制代码 ; 允许或阻止持久连接. mysql.allow_persistent = Off 修改my.cnf参数为  代码如下 复制代码 max_connections = 600 (建议600~1000 一般大于apahce的MaxClients ) wait_timeout = 5 效果截图 不过超

linux下php添加zlib后页面乱码解决办法

在linux下php添加zlib后页面乱码的解决办法 原因: 在php.ini中 如果zlib.output_compression = On,那在程序中不就要再使用gzencode()压缩,不然就会呈现乱码. 解决办法: zlib.output_compression = Off 重启apache即可. zlib安装 1. 下载安装zlib http://www.gzip.org/zlib/ 解压tar包,进入目录执行命令: 1 ./configure && make &&