运维经–目录
删掉^M这个鬼东西
^M这个鬼东西是怎么来的?通俗讲就是解决换行回车的问题。
dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter)。DOS下的文本文件是以\r\n作为断行标志的,表示成十六进制就是0D 0A。而Unix下的文本文件是以\n作为断行标志的,表示成十六进制就是0A。DOS格式的文本文件在Linux底下,用较低版本的vi打开时行尾会显示^M,而且很多命令都无法很好的处理这种格式的文件,如果是个shell脚本,。而Unix格式的文本文件在Windows下用Notepad打开时会拼在一起显示。因此产生了两种格式文件相互转换的需求,对应的将UNIX格式文本文件转成成DOS格式的是unix2dos命令。
使用方法非常简单
(base) frank@deepin:~/project/go/tendermint/bin$ unix2dos a.txt
unix2dos: 正在转换文件 a.txt 为DOS格式...
(base) frank@deepin:~/project/go/tendermint/bin$ vi a.txt
(base) frank@deepin:~/project/go/tendermint/bin$ file a.txt
a.txt: ASCII text, with CRLF line terminators
(base) frank@deepin:~/project/go/tendermint/bin$ dos2unix a.txt
dos2unix: 正在转换文件 a.txt 为Unix格式...
(base) frank@deepin:~/project/go/tendermint/bin$ file a.txt
a.txt: ASCII text
可以看到dos格式文件的属性会有with CRLF line terminators
这样的一句,是什么意思呢?
CRLF(Carriage-Return Line-Feed),是回车换行,就是回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)。
dos2unix参数列表
用法:dos2unix [选项] [文件 ...] [-n 输入文件 输出文件 ...]
-ascii 只转换换行符(默认)
-iso 在 DOS 和 ISO-8859-1 字符集之间转换
-1252 使用Windows 1252 编码页(西欧)
-437 使用DOS 437 编码页(US)(默认)
-850 使用DOS 850 编码页(西欧)
-860 使用DOS 860 编码页(葡萄牙)
-863 使用DOS 863 编码页(加拿大法語)
-865 使用DOS 865 编码页(北欧)
-7 转换8 位字符到7 位空间
-b, --keep-bom 保留UTF-8 BOM头
-c, --convmode 转换模式
convmode ascii、7bit、iso或mac,默认为ascii
-f, --force 强制转换二进制文件
-h, --help 显示本说明文字
-i, --info[=FLAGS] 显示文件信息
文件 ... 需要分析的文件
-k, --keepdate 保留输出文件时间
-L, --license 显示软件协议
-l, --newline 加入额外的换行符
-m, --add-bom 添加UTF-8 BOM头(默认为UTF-8)
-n, --newfile 写入新文件
infile 新文件模式中的原始文件
outfile 新文件模式中的输出文件
-o, --oldfile 写入原文件(默认)
file ... 旧文件模式中要转换的文件
-q, --quiet 安静模式,不显示所有警告
-r, --remove-bom 移除UTF-8 BOM头(默认)
-s, --safe 跳过二进制文件(默认)
-u, --keep-utf16 保留UTF-16编码
-ul, --assume-utf16le 假定输入文件格式为UTF-16LE
-ub, --assume-utf16be 假定输入文件格式为UTF-16BE
-v, --verbose 显示更多信息
-F, --follow-symlink 根据符号链接转换其目标文件
-R, --replace-symlink 取代符号链接为转换后的文件
(原链接目标文件保持不变)
-S, --skip-symlink 保持符号链接及其目标不变(默认)
-V, --version 显示版本号
PS:如果是单纯的去掉^M,用vim的:%s/ctrl-v,ctrl-m//g