一、问题产生的原因:

DOS/Windows和Linux/Unix的文件换行回车格式不同,基于 DOS/Windows 的文本文件在每一行末尾有一个 CR(回车)和 LF(换行),而 UNIX 文本只有一个换行。

对于换行这个动作,unix下一般只有一个0x0A表示换行("\n"),windows下一般都是0x0D和0x0A两个字符("\r\n"),苹果机(MAC OS系统)则采用回车符CR表示下一行(\r)

Unix系统里,每行结尾只有“<换行>”,即“\n”;
Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;
Mac系统里,每行结尾是“<回车>”,即“\r”。
一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix下打开的话,在每行的结尾会多一个^M字符。即 "\r" = ^M

Dos和windows采用回车+换行 CR+LF(\r\n)表示下一行,即^M$($不是换行符的表示,换行符没有表示出来,$是文本结束EOF的表示);

UNIX/Linux采用换行符LF表示下一行,即\n;LF使用'\n'符号表示, ASCII代码是10, 十六制为0x0A. 
MAC 系统则采用回车符CR表示下一行,即\r;CR用符号'\r'表示, 十进制ASCII代码是13, 十六进制代码为0x0D;

所以Windows平台上换行在文本文件中是使用 0d 0a 两个字节表示, 而UNIX和苹果平台上换行则是使用0a或0d一个字节表示.由于dos风格的换行使用\r\n,把这样的文件上传到unix,有些版本的vi不能识别\r,所以vi显示时在行尾会出现^M出来,但是有些就能识别\r\n,正常显示回车换行。

二、用sed进行转换

以下 sed 调用将把 DOS/Windows 格式的文本------->>可信赖的 UNIX 格式:

sed -i 's/^M$//g' 即寻找以 ^M 结尾的行,string^M\n----》string\n.

sed -i 's/\r$//g'    #这个命令也可以。

反过来,也可以把UNIX---->DOS.    \n----->\r\n.

sed -i 's/$/\r\n/'      #在该脚本中,'$' 规则表达式将与行的末尾匹配,而 '\r' 告诉 sed 在其之前插入一个回车。在换行之前插入回车,立即,每一行就以 CR/LF 结束。

1. vim中查询修改文件编码格式
:set ff 查看当前文本的模式类型,一般为dos,unix
:set ff=dos 设置为dos模式, 也可以用 sed -i 's/$/\r/' 
:set ff=unix 设置为unix模式,也可以用一下方式转换为unix模式:sed -i 's/.$//g'

:set fileencoding查看现在文本的编码
:set fenc=编码 转换当前文本的编码为指定的编码
:set enc=编码 以指定的编码显示文本,但不保存到文件中。这里的“编码”常见为gbk utf-8 big5 cp936
2. 在Linux/Window下批量处理文件格式
2.1 使用 sed + grep

#sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录`

eg:  sed -i 's/$/\r/g' `grep '$' -rl .`   #批量转unix to dos (亲测可用)

2.2 使用find + sed

eg: find . -name "*.tcl" | xargs sed -i 's/\r$//g'    #批量转dos to unix (亲测可用!)

2.3  在git 下,对已经编辑过的文件进行转换。

git status |grep ".tcl"|sed "s/modified:   //"|xargs sed -i "s/\r$//g"

其他方法: 
在Vim显示^M字符的原因:在Windows下换行使用CRLF两个字符来表示,其中CR为回车(ASCII=0x0D),LF为换行(ASCII=0x0A),而在Linux下使用LF一个字符来表示。在Linux下使用vi来查看一些Windows下创建的文本文件时,有时会发现在每一行尾部有^M字符,其实它是显示CR回车字符。
sublime 设置为:windows使用的CRLF,unix使用的是 LF。按你的情况,应该在Setting-User中设置"default_line_ending":"unix"就可以解决这个问题。

下面有一些方法可以处理这种问题(其实这只是Windows和Linux平台表示回车的方法不一样而已!!!!)。
2.1 使用dos2unix
一般Linux发行版中都带有这个小工具,只能把DOS转换为UNIX文件,命令如下:
# dos2unix dosfile.txt       命令会去掉行尾的^M符号。

2.2 使用tr
使用tr命令拷贝标准输入到标准输出,替换或者删除掉选择的字符,只能把DOS转换为UNIX文件,命令如下:
# tr -d ‘\r’< dosfile.txt > unixfile.txt

2.3 使用vim
Vim是一个vi的改进版本,可以运行在Windows和Linux平台上,使用方法如下:
DOS转UNIX::setfileformat=unix
UNIX转DOS::setfileformat=dos
你也可以使用ff来替代fileformat
注:为了能让vim可以自动识别DOS和UNIX文本文件格式,可以在.vimrc(Linux)或_vimrc(Windows)配置文件中加入如下一行设置:
         setfileformats=dos,unix
         设置完成后,使用vim打开DOS文本文件就不会显示^M字符了。

2.4 使用sed
         在DOS文件格式中使用CR/LF换行,在Unix下仅使用LF换行,sed替换命令如下:
         DOS转UNIX:$ sed ‘s/.$//’dosfile.txt > unixfile.txt
         UNIX转DOS:$ sed ’s/$/\r/’unixfile.txt > dosfile.txt
2.5 使用Perl
         Perl是相当直接,你添加或删除掉文件每行结尾的CR字符。
         DOS转UNIX:perl -p -e ‘s/\r$//’< dosfile.txt > unixfile.txt
         UNIX转DOS:perl -p -e ‘s/$/\r/’< unixfile.txt > dosfile.txt

总结
         还有其它DOS和UNIX文本文件的转换方法,我个人推荐使用vim命令。但是,对于大型的文件,推荐使用perl工具,你也不希望在vim或Emacs中打开几个G的文本文件。

批量将目录下所有文件进行 dos/unix 格式转换相关推荐

  1. Python:批量读取目录下jpg文件,并输出jpg文件的绝对路径到指定txt文档中。

    #功能:读取jpg文件,输出绝对目录到txt中. import os.path import glob import os"""https://blog.csdn.net ...

  2. python批量重命名指定目录下所有文件的后缀名

    python批量重命名指定目录下所有文件的后缀名 有个需求,需要把某个文件夹下所有后缀名为.abc的更改为.xyz; #批量重命名指定目录下面所有文件的后缀名. word_dir为需要更改后缀的文件夹 ...

  3. python批量复制文件问题,python 批量复制不同目录下的文件

    python 批量复制不同目录下的文件 #!/usr/bin/env python #coding=UTF-8 #author aping import os,sys,shutil,time impo ...

  4. shell访问php文件夹,Shell获取某目录下所有文件夹的名称

    Shell获取某目录下所有文件夹的名称以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Shell获取某目录下所有文件夹的 ...

  5. 企业的网站遭受木马攻击了,导致网站目录下所有文件都被篡改了

    问题: 一个 lamp 的服务器站点目录下所有文件均被植入如下内容 <script language=javascript src=http://luoahong.blog.51cto.com/ ...

  6. linux怎么在目录下查找文件,linux find-在指定目录下查找文件

    find命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件.并且将查找到的子目录和文件全部进 ...

  7. linux目录下所有文件内容替换,linux替换目录下所有文件中的某字符串

    比如,要将目录/modules下面所有文件中的zhangsan都修改成lisi,这样做: sed -i "s/zhangsan/lisi/g" `grep zhangsan -rl ...

  8. linux如何查看指定目录下文件内容,Linux 系统下通过关键词查找指定目录下的文件内容...

    #!/bin/bash # 作者:靑龍一笑(C.S.Ricen) # 功能:根据指定的关键词,查找指定目录下的文件内容 # 要查找的目录 Search_Dir=/opt/datas/ # 关键字列表 ...

  9. c# 监视目录下的文件变化

    在工作中需要学习一个应用系统软件,比较复杂,经常要在线读取ini,txt好多种类的文件,还有查问题的时候要分析log文件,但是我比较笨,又记不住什么时候动哪些文件,感觉学习好慢! 后来就想,我既然记不 ...

最新文章

  1. C# 开发微信扫码登录
  2. ACM计算几何题目推荐
  3. Linux读写锁释放,Linux读写锁的使用
  4. unrecognised EXT_CSD revision 6解决办法
  5. 智能投放系统之场景分析最佳实践
  6. 快手 算法工程师 0825 笔试题
  7. easyui label显示不全_easyui 元素遍历问题
  8. 【入门6】函数与结构体(今天刷洛谷了嘛)
  9. DRUID连接池的使用
  10. GPU成为主流 NVIDIA GRID亮相Citrix Synergy 2017
  11. 江苏计算机云服务,云呐|江苏企业机房环境动环监控服务商系统智能监测
  12. WebStorm 6.0下运行pomelo项目
  13. TMS320F28335的SPI
  14. 知乎推荐育儿书籍汇总
  15. meta分析 2. 固定效应和随机效应
  16. 小书MybatisPlus第9篇-常用字段默认值自动填充
  17. Linux下网络传输(模拟路由器)
  18. 按键精灵连接远程mysql_【按键精灵】按键精灵读取github page 网页,实现脚本远程控制功能...
  19. uiautomator2+python实现企业微信自动打卡
  20. 浙江省引进人才居住证和浙江省居住证有什么不同?

热门文章

  1. 计算机一级cad试题及答案,计算机一级模拟试题及答案
  2. 亲情互动物联网智能手环
  3. 用手机微信小程序怎么打印好友发来的资料及文件
  4. 国产化服务器挂载硬盘,国产化笔记 - 国产数据库达梦在国产银河麒麟系统上的安装与使用...
  5. 点坐标获取,导出与导入
  6. VIS 2021论文
  7. 试着用U盘做一个微PE启动盘
  8. 1.新电脑开荒(拯救者R9000p)
  9. PowerPC MMU机制读书笔记
  10. 判断点是否在四边形内