Windows文件换行符转Linux换行符

前段时间,有个朋友碰到由于Windows的换行符和Linux换行符不一样,导致程序编译不通过。这个问题之前自己也碰到过,网上资料也蛮多,不过还是借此总结总结,因为发现总结+实践的方式能够让自己更好的提升。

操作系统文件换行符

首先介绍下,在ASCII中存在这样两个字符CR(编码为13)和 LF(编码为10),在编程中我们一般称其分别为‘\r‘和‘\n‘。他们被用来作为换行标志,但在不同系统中换行标志又不一样。下面是不同操作系统采用不同的换行符:

  • Unix和类Unix(如Linux):换行符采用 \n
  • Windows和MS-DOS:换行符采用 \r\n
  • Mac OS X之前的系统:换行符采用 \r
  • Mac OS X:换行符采用 \n

Linux中查看换行符

在Linux中查看换行符的方法应该有很多种,这里介绍两种比较常用的方法。

第一种使用"cat  -A [Filename]" 查看,如下图所示,看到的为一个Windows形式的换行符,\r对应符号^M\n对应符号$.

第二种使用vi编辑器查看,然后使用"set list"命令显示特殊字符:

咦,细心的朋友发现了,怎么^M还是没显示出来,这里也是给大家提个醒,用VI的二进制模式(“vi -b [FileName]”)打开,才能够显示出^M

Windows换行符转换为Linux格式

下面介绍三种方法,选择哪一种看自己喜好,当然你也可以选择第x种,^_^。

(1)第一种使用VI: 使用VI普通模式打开文件,然后运行命令"set ff=unix" 则可以将Windows 换行符转换为Linux换行符,简单吧!命令中ff的全称为file encoding

(2)使用命令"dos2unix",如下所示

[[email protected] test]# dos2unix gggggggg.txt
dos2unix: converting file gggggggg.txt to UNIX format ...

(3)使用sed命令删除\r字符:

[[email protected] test]# sed -i 's/\r//g' gggggggg.txt 

多文件处理换行符转换

通常我们都会有一批文件需要替换,比如一个目录的都要替换,我自己写了一个简单的脚本去遍历目录和子目录下的所有文件,并且将其转换为Linux换行格式。代码如下:

#!/bin/sh

#CheckInput
#Check Whether the input is valid
#0 means not valid
CheckInput()
{
	ret=1;

	#Check the number of parameter
	#And Check whether the argument is a folder
	if [ $# -lt 1 ]
        then
		echo "Please use the command like ./dos2u.sh [Folder]";
		ret=0
	elif [ ! -d $1 ]
	then
		echo "Please use an invalid Folder as the shell argument";
		ret=0
	fi

	return $ret;
}

#TraverseFolder
#Traser all the files under the folder
TraverseFolder()
{
	oldPath=`pwd`
	cd $1;
	for file in `ls`
	do
		if [ -d $file ]
		then
			TraverseFolder $file;
		else
			#echo $file;
			#sed -i 's/\r//g' $file
			dos2unix $file
		fi
	done
	cd $oldPath;
}

CheckInput $*
if [ $ret -ne 1 ]
then
	exit -1
fi

TraverseFolder $1

这个就纯当练习了,应该可以用更简单的方式去解决,比如find命令+dos2unix命令,小伙伴们可以自己试一试。我这么写 主要目的是为了 以后有其他需求更便于扩展,当然还有一些bug要修改啦~~~~^_^。

参考

1. How To Convert Files from Linux/Unix Format to Windows and Vice Versa:

https://www.maketecheasier.com/convert-files-from-linux-format-windows/

2. Difference Between \n and \r?

http://stackoverflow.com/questions/1761051/difference-between-n-and-r

3. 美国信息交换标准代码

http://baike.baidu.com/view/492542.htm

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-29 09:48:22

Windows文件换行符转Linux换行符的相关文章

将Windows文件挂在到Linux上

1.先在windows下面共享需要挂载的目录. 2.确保linux与windows是在同一个局域网当中. 3.在linux下面创建一个需要挂载到的目录. 4.利用mount命令进行挂载. (1),mount -t cifs //ip/windows共享目录名 /linux上面的挂载点目录 -o username=windows用户,password=访问共享需要的密码 或者 mount -t cifs -o username='用户名',password='密码' //ip/共享目录名 /挂在路

windows文件夹共享给linux使用和防火墙配置

第一步,windows上文件设置共享 高级共享上设置共享名字 在共享上设置,添加用户 第二步,配置windows防火墙 第三步,linux上挂载目录 mount -t cifs -o username="xiaofeng",password="xxx" //172.18.1.156/log /mnt 注意:   log是共享名字 原文地址:https://www.cnblogs.com/xiaofeng0510/p/8669227.html

转载 vi替换windows换行符为linux换行符

1.用vi打开指定文本文件:vi filename.c 2.按 Esc 键,进入命令模式: 3.按 : 键 (按 Shift 键不放后,同时按 : 键)进入命令输入状态: 4.在冒号后输入:%s/^M//g 注:^M是一个字符不是输入^和M两个字符, 即按住 Ctrl 键不放,同时按 V 键产生^,依然按住 Ctrl 键不放,同时按 M 产生M. 5.按 Enter 键,执行替换命令 6.按 : 键 (按 Shift 键不放后,按 : 键)进入命令输入状态: 7.在冒号后输入:wq  <-- 保

windows文件上传到linux服务器上

https://blog.csdn.net/m0_37751917/article/details/80739850 1:检查是否安装sz  rz rpm -qa |grep sz rpm -qa |grep rz 2:如果没有安装,安装一下 yum install sz 3:如果安装失败,搜索一下 yum search sz 4:根据搜索结果,进行安装 yum -y install lrzsz.x86_64 5:安装完成.rz一下进行选择文件 [[email protected] /]# rz

Linux文件和windows文件在 换行符的区别

Linux或Unix文件,和windows文件,在来回处理时,如果不注意 换行符的区别,可能导致程序错误!!!深刻的教训.... 在早期的打印机时代,开始新的一行要占用两个字符的时间.如果到了一行的结尾处,你要快速回到新的一行的开头,需要打印针头在纸面上飞快地掠过,常常会在纸面上留下污点.解决这个问题的办法就是,用两个字符:一个字符<Return>来移到第一列,另一个字符<Line feed>来新增一行.计算机产生以后,存储较为昂贵,在如何解决回车换行这个老问题上,人们产生了不同的

Windows、Unix、Mac不同操作系统的换行问题-剖析回车符\r和换行符\n

转载链接:http://blog.csdn.net/tskyfree/article/details/8121951 一.概念: 换行符‘\n’和回车符‘\r’ (1)换行符就是另起一行  --- '\n' 10 换行(newline) (2)回车符就是回到一行的开头 --- '\r' 13 回车(return) 所以我们平时编写文件的回车符应该确切来说叫做回车换行符     二.应用: (1)在微软的MS-DOS和Windows中,使用“回车CR('\r')”和“换行LF('\n')”两个字符

菜鸟随笔(1)---Windows、Unix、Mac不同操作系统的换行问题 回车符\r和换行符\n

一只菜鸟横空出世,码农世界闯一闯,每天进展多一丢丢. Windows.Unix.Mac不同操作系统的换行问题 回车符\r和换行符\n 一.概念: 换行符'\n'和回车符'\r' (1)换行符就是另起一行 --- '\n' 10 换行(newline) (2)回车符就是回到一行的开头 --- '\r' 13 回车(return) 所以我们平时编写文件的回车符应该确切来说叫做回车换行符 CR: 回车(Carriage Return) \rLF: 换行(Line Feed) \n 二.应用: (1)在

读TXT文件时末尾多个换行符问题

使用getline()读txt文件的时候,不注意会出现点小bug. 贴代码: #include<iostream> #include<string.h> #include<fstream> #include<sstream> using namespace std; int main() { ifstream in("aaa.txt"); string s; int i = 0; while (getline(in, s)) { cout

windows和linux换行规则的区别

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符.但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符.要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失. 于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符.一个叫做"回车"(Carriage Return),告诉打字机把打印头定位在左边界:另一个叫做"换行"(Linefeed),告诉打字机把纸向