linux下文件与Windows下文件格式的区别与转换

问题:

Windows下的TXT文件上传到Linux系统上,用cut,grep.sed,awk等文本处理工具处理过后再次传到Windows电脑上,发现内容都连到一块了,百度了一下才知道换行符被删除了,

so,问题来了,怎么处理就不会把换行符删除?

在Windows下编写的文件,当在Linux下用 cat -v filename 命令查看时,可以发现每行的结尾都有^M字符。当我们在Linux下写的应用程序在读取含有^M字符的文件时,会出现意想不到的错误。所以需要将Windows下文件的格式转换为Linux下的文件格式。

仍存在的疑惑:

在我的vi中打开含有^M的文件,设置 :set list 只能看到以“$”表示的换行符,并没有看到有^M字符。使用 :%/^M$//g 进行替换也没有找到。

注意:To get the ^M do not actually enter it as is. Insert it by typing the CTRL-V CTRL-M sequence instead.

去除^M的方法:

去除^M的方法很多,总结一些如下:

方法1:在vi中转换文件的格式,直接输入以下命令,然后 :wq。

:set fileformat=unix

:set fileformat=dos

方法2:使用col命令

cat file_win | col -b > file_linux

cat file_win | col -b | tee file_linux

方法3:使用tr命令

cat file_win | tr -d '/r' > file_linux

cat file_win | tr -d '/r' | tee file_linux

实例:

公司以前没有固定的邮箱地址,现在想统一邮箱地址,所以域名备案,使用第三方的邮箱服务器;对方需要我们的人数及用户名。人事统计了公司所有人的邮箱地址做成一个Excel表格发给我了。


私人照片,滥用必究

几百个人,我要一个个的把邮箱后缀都去掉,不知道怎么Excel表格里弄,所以就想到把这一列复制到一个TXT文件中,然后上传到我的Linux主机上,用文本处理工具处理就方便很多了。

但是处理完后,再次传回Windows主机,打开一看,全是一堆字母。才知道换行符也被我处理了。

]# cut -d@ -f1 a.txt >b.txt 命令将提取邮箱的用户名并保存到b.txt文件中

正确的方法

a.txt文件的内容


个人照片,滥用必究

]# cat -v a.txt                     #看到原文件里每行结尾都有^M字符

]# cp a.txt b.txt                  #备份

vi b.txt  vi                           #编辑

:set fileformat=unix            #设置格式为Unix

:wq                                     #保存退出

]# cut -d@ -f1 b.txt >c.txt  #截取b文件里的用户名并保存到c里

vi c.txt                                #编辑c

:set fileformat=dos            #将格式改为dos

:wq                                    #保存退出

]# sz c.txt                           #将文件传到Windows上,将文件上传至Linux上的命令是rz,程序包是lrzsz

                                              没有就yum install lrzsz 安装

参考博客:delphiwcdj的专栏

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容