Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说dos2unix,希望能够帮助你!!!。
Linux和Windows文本文件的行结束标志不同。在Linux中,文本文件用"/n"表示回车换行,而Windows用"/r/n"表示回车换行。所以在Linux中使用Windows的文本文件常常会出现错误。为了避免这种错误,Linux提供了两种文本格式相互转化的命令:dos2unix和unix2dos,dos2unix把"/r/n"转化成"/n",unixtodos把"/n"转化成"/r/n"。
命令dos2unix和unix2dos的使用非常简单,格式为:dos2unix filename
批量进行文件转换:
find -
type
f |
xargs
dos2unix
去掉windows文本的多余的回车符(^M)
*******************************************************************
使用示例示例一 DOS格式文本文件在Linux下的表现
现在有一个脚本文件job.sh,是在Linux下用vi编辑的。
[root@jfht ~]# cat job.sh
#!/bin/sh
date >job.txt
现在把它转换成DOS格式文本文件。
[root@jfht ~]# unix2dos job.sh
unix2dos: converting file job.sh to DOS format ...
尝试着运行一下。
[root@jfht ~]# ./job.sh
-bash: ./job.sh: 权限不够
[root@jfht ~]# chmod +x job.sh
[root@jfht ~]# ./job.sh
-bash: ./job.sh: /bin/sh^M: bad interpreter: 没有那个文件或目录
DOS格式的脚本文件时无法解释执行的,因为脚本文件的第一行是用来指定解释器的,Linux系统认为解释器是/bin/sh^M,而不是/bin/sh。
我们来通过Linux下的一些命令来看一下DOS格式文件的真面目。
[root@jfht ~]# cat -v job.sh<== cat -v可以看到文件中的非打印字符,而不带-v参数的cat命令不行。
#!/bin/sh^M
^M
date >job.txt^M
^M
[root@jfht ~]# hexdump -C job.sh<== hexdump -C可以看到文件每个字节的十六进制表示。
00000000 23 21 2f 62 69 6e 2f 73 68 0d 0a0d 0a 64 61 74 |#!/bin/sh....dat|
00000010 65 20 3e 6a 6f 62 2e 74 78 74 0d 0a 0d 0a |e >job.txt....|
0000001e
[root@jfht ~]# vi job.sh<== 使用vi打开时可以看到底下有[dos]的格式提示。有些版本vi显示的是行尾为^M。
#!/bin/sh
date >job.txt
~
~
"job.sh" [dos] 4L, 30C
现在我们把DOS格式改回Unix格式的,看看效果。
root@jfht ~]# dos2unix job.sh
dos2unix: converting file job.sh to UNIX format ...
[root@jfht ~]# ./job.sh
可以执行了,不再报“-bash: ./job.sh: /bin/sh^M: bad interpreter: 没有那个文件或目录”这个错了。
[root@jfht ~]#
1)使用sed
去掉windows下的回车符 (注意^M 在linux 下写法 按^M 是回车换行符,输入方法是按住CTRL+v,松开v,按m)
sed -i 's/^M//g' filename
2) 在vim下类似
:%s/^M//g
(^M输入方法和上面方法相同)
dos2unix 命令
这是一个很简单的命令.功能是将DOS/MAC下的文件转化为UNIX的文本文件格式.用法详见下面.
SYNOPSYS
dos2unix [options] [-c convmode] [-o file ...] [-n infile outfile ...]
Options:
[-hkqV] [--help] [--keepdate] [--quiet] [--version]
DESCRIPTION
dos2unix, the program that converts plain text files in DOS/MAC format to UNIX format.
OPTIONS
The following options are
available:
-h --help
Print online help.
-k --keepdate
Keep the date stamp of output file same as input file.
-q --quiet
Quiet mode. Suppress all warning and messages.
-V --version
Prints version information.
-c --convmode convmode
Sets conversion mode. Where convmode is one of: ASCII, 7bit,ISO, Mac with ASCII being the default. Simulates dos2unix under SunOS.
-o --oldfile file ...
Old file mode. Convert the file
and write output to it. The pro-
gram default to run in this mode. Wildcard names may be used.
-n --newfile infile outfile
...
New file mode. Convert the infile and write output to outfile.
File names must be given in pairs and wildcard names should NOT be used or you WILL lost your files.
EXAMPLES
Get input from stdin and write output to stdout. dos2unix
Convert and replace a.txt. Convert and replace b.txt.
dos2unix a.txt b.txt
dos2unix -o a.txt b.txt
Convert and replace a.txt in ASCII conversion mode.
dos2unix a.txt -c iso b.txt
Convert and replace b.txt in ISO conversion mode.
dos2unix -c ascii a.txt -c iso b.txt
Convert c.txt from Mac to Unix ascii format.
dos2unix -c mac c.txt b.txt
Convert and replace a.txt while keeping original date stamp.
dos2unix -k a.txt
dos2unix -k -o a.txt
Convert a.txt and write to e.txt.
dos2unix -n a.txt e.txt
Convert a.txt and write to e.txt, keep date stamp of e.txt same as a.txt.
dos2unix -k -n a.txt e.txt
Convert and replace a.txt. Convert b.txt
and write to e.txt.
dos2unix a.txt -n b.txt e.txt
dos2unix -o a.txt -n b.txt e.txt
Convert c.txt and write to e.txt. Convert and replace a.txt. Convert and replace b.txt. Convert d.txt and write to f.txt.
dos2unix -n c.txt e.txt -o a.txt b.txt -n d.txt f.txt
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章