Linux中國

如何將文本文件在 Unix 和 DOS(Windows)格式之間轉換

作為一名 Linux 管理員,你可能已經注意到了一些開發者請求將文件從 DOS 格式轉換為 Unix 格式,反之亦然。

這是因為這些文件是在 Windows 系統上創建的,並由於某種原因被複制到 Linux 系統上。

這本身沒什麼問題,但 Linux 系統上的一些應用可能不能理解這些新的換行符,所以在使用之前,你需要轉換它們。

DOS 文本文件帶有回車(CRr)和換行(LFn)一對字元作為它們的換行符,而 Unix 文本只有換行(LF)符。

有很多方法可以將 DOS 文本文件轉換為 Unix 格式。

但我推薦使用一個名為 dos2unix / unix2dos 的特殊工具將文本在 DOS 和 Unix 格式之間轉換。

  • dos2unix :將文本文件從 DOS 格式轉換為 Unix 格式。
  • unix2dos :將文本文件從 Unix 格式轉換為 DOS 格式。
  • trawksed 命令:這些可以用於相同的目的。

使用 od 八進位轉儲 octal dump )命令可以很容易地識別文件是 DOS 格式還是 Unix 格式,如下圖所示:

# od -bc windows.txt
0000000 125 156 151 170 040 151 163 040 141 040 146 162 145 145 040 157
U n i x i s a f r e e o
0000020 160 145 156 163 157 165 162 143 145 040 157 160 145 162 141 164
p e n s o u r c e o p e r a t
0000040 151 156 147 040 163 171 163 164 145 155 015 012 123 165 160 145
i n g s y s t e m r n S u p e
0000060 162 040 143 157 155 160 165 164 145 162 163 040 141 162 145 040
r c o m p u t e r s a r e
0000100 162 165 156 156 151 156 147 040 157 156 040 125 116 111 130 015
r u n n i n g o n U N I X r
0000120 012 071 065 045 040 157 146 040 167 145 142 163 151 164 145 163
n 9 5 % o f w e b s i t e s
0000140 040 141 162 145 040 162 165 156 156 151 156 147 040 157 156 040
a r e r u n n i n g o n
0000160 114 151 156 165 170 040 117 123 015 012 101 156 171 164 150 151
L i n u x O S r n A n y t h i
0000200 156 147 040 143 141 156 040 142 145 040 144 157 156 145 040 157
n g c a n b e d o n e o
0000220 156 040 114 151 156 165 170 015 012
n L i n u x r n
0000231

上面的輸出清楚地表明這是一個 DOS 格式的文件,因為它包含了轉義序列 rn

同時,當你在終端上列印文件輸出時,你會得到下面的輸出:

# cat windows.txt
Unix is a free opensource operating system
Super computers are running on UNIX
95% of websites are running on Linux OS
Anything can be done on Linux

如何在 Linux 上安裝 dos2unix?

dos2unix 可以很容易地從發行版的官方倉庫中安裝。

對於 RHEL/CentOS 6/7 系統,使用 yum 命令 安裝 dos2unix

$ sudo yum install -y dos2unix

對於 RHEL/CentOS 8 和 Fedora 系統,使用 dnf 命令 安裝 dos2unix

$ sudo yum install -y dos2unix

對於基於 Debian 的系統,使用 apt 命令apt-get 命令 來安裝 dos2unix

$ sudo apt-get update
$ sudo apt-get install dos2unix

對於 openSUSE 系統,使用 zypper命令 安裝 dos2unix

$ sudo zypper install -y dos2unix

1)如何將 DOS 文件轉換為 UNIX 格式?

以下命令將 windows.txt 文件從 DOS 轉換為 Unix 格式。

對該文件的修改是刪除文件每行的 r

# dos2unix windows.txt
dos2unix: converting file windows.txt to Unix format …
# cat windows.txt
0000000 125 156 151 170 040 151 163 040 141 040 146 162 145 145 040 157
U n i x i s a f r e e o
0000020 160 145 156 163 157 165 162 143 145 040 157 160 145 162 141 164
p e n s o u r c e o p e r a t
0000040 151 156 147 040 163 171 163 164 145 155 012 123 165 160 145 162
i n g s y s t e m n S u p e r
0000060 040 143 157 155 160 165 164 145 162 163 040 141 162 145 040 162
c o m p u t e r s a r e r
0000100 165 156 156 151 156 147 040 157 156 040 125 116 111 130 012 071
u n n i n g o n U N I X n 9
0000120 065 045 040 157 146 040 167 145 142 163 151 164 145 163 040 141
5 % o f w e b s i t e s a
0000140 162 145 040 162 165 156 156 151 156 147 040 157 156 040 114 151
r e r u n n i n g o n L i
0000160 156 165 170 040 117 123 012 101 156 171 164 150 151 156 147 040
n u x O S n A n y t h i n g
0000200 143 141 156 040 142 145 040 144 157 156 145 040 157 156 040 114
c a n b e d o n e o n L
0000220 151 156 165 170 012
i n u x n
0000225

上面的命令將覆蓋原始文件。

如果你想保留原始文件,請使用以下命令。這將把轉換後的輸出保存為一個新文件。

# dos2unix -n windows.txt unix.txt
dos2unix: converting file windows.txt to file unix.txt in Unix format …

1a)如何使用 tr 命令將 DOS 文件轉換為 UNIX 格式。

正如文章開頭所討論的,你可以如下所示使用 tr 命令將 DOS 文件轉換為 Unix 格式。

Syntax: tr -d &apos;r&apos; < source_file > output_file

下面的 tr 命令將 DOS 格式的文件 windows.txt 轉換為 Unix 格式文件 unix.txt

# tr -d &apos;r&apos; < windows.txt >unix.txt

注意:不能使用 tr 命令將文件從 Unix 格式轉換為 Windows(DOS)。

1b)如何使用 awk 命令將 DOS 文件轉換為 UNIX 格式。

使用以下 awk 命令格式將 DOS 文件轉換為 Unix 格式。

Syntax: awk &apos;{ sub("r$", ""); print }&apos; source_file.txt > output_file.txt

以下 awk 命令將 DOS 文件 windows.txt 轉換為 Unix 格式文件 unix.txt

# awk &apos;{ sub("r$", ""); print }&apos; windows.txt > unix.txt

2)如何將 UNIX 文件轉換為 DOS 格式?

當你把一個文件從 UNIX 轉換為 DOS 格式時,它會在每一行中添加一個回車(CRr)。

# unix2dos unix.txt
unix2dos: converting file unix.txt to DOS format …

該命令將保留原始文件。

# unix2dos -n unix.txt windows.txt
unix2dos: converting file unix.txt to file windows.txt in DOS format …

2a)如何使用 awk 命令將 UNIX 文件轉換為 DOS 格式?

使用以下 awk 命令格式將 UNIX 文件轉換為 DOS 格式。

Syntax: awk &apos;sub("$", "r")&apos; source_file.txt > output_file.txt

下面的 awk 命令將 unix.txt 文件轉換為 DOS 格式文件 windows.txt

# awk &apos;sub("$", "r")&apos; unix.txt > windows.txt

via: https://www.2daygeek.com/how-to-convert-text-files-between-unix-and-dos-windows-formats/

作者:Magesh Maruthamuthu 選題:lujun9972 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國