dos2unix

(3) 2024-04-27 10:23

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说dos2unix,希望能够帮助你!!!。

LinuxWindows文本文件的行结束标志不同。在Linux中,文本文件用"/n"表示回车换行,而Windows"/r/n"表示回车换行。所以在Linux中使用Windows的文本文件常常会出现错误。为了避免这种错误,Linux提供了两种文本格式相互转化的命令:dos2unixunix2dosdos2unix"/r/n"转化成"/n"unixtodos"/n"转化成"/r/n"
命令dos2unixunix2dos的使用非常简单,格式为: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

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复