- 當(dāng)一個(gè)文件在Windows和Linux上交替操作后,經(jīng)常遇到一些莫名其妙的問題,如shell腳本無法執(zhí)行,找不到shell腳本等問題,本文謹(jǐn)就這一問題做一總結(jié),供各位參考;
- 本文作者: 花神廟碼農(nóng)
- 博客地址,https://blog.csdn.net/qxhgd。
格式差異
- 換行符是行尾 (EOL),是一個(gè)特殊的字符或字符序列,表示一行文本的結(jié)尾和新行的開頭;
- 表示換行符的實(shí)際代碼因操作系統(tǒng)而異:-- Microsoft Windows,DOS(MS-DOS,PC DOS等)使用CR + LF;-- Unix和類Unix系統(tǒng)使用,包括Linux,OS X,F(xiàn)reeBSD等使用LF;-- MAC系統(tǒng)里,使用CR;
- CR即ASCII碼的0x0D( ),LF為ASCII碼的0x0A( ),DOS下使用( ),類Unix系統(tǒng)下使用( ),DOS系統(tǒng)下的' '在類Unix系統(tǒng)下會(huì)被顯示為 ^M。
后文僅以test-dos.sh文件為例來說明,具體內(nèi)容如下:
#!/bin/bash
echo"HelloWorld!"
格式影響
直觀影響
- Unix/Mac系統(tǒng)下的文件在Windows里打開的話,所有文字會(huì)變成一行(由于Windows下編輯器的處理,這種情況一般不會(huì)發(fā)生);
- 而Windows里的文件在Unix/Mac下打開的話,在每行的結(jié)尾可能會(huì)多出一個(gè)^M符號(hào);
功能影響
- 在windows上編寫的shell、python等腳本在Linux上?法正常的執(zhí)?,會(huì)有 ^M 相關(guān)提?:
[qxhgd@localhostcrlf]$./test-dos.sh
-bash:./test.sh:/bin/bash^M:badinterpreter:Nosuchfileordirectory
- 如果在make編譯的時(shí)候,執(zhí)行mksh(一個(gè)shell文件)可能會(huì)有類似下面的提示:
make[3]:./mksh:Commandnotfound
格式查看
Windows下查看
- 利用編輯器,如Visual Studio Code、UltraEdit、Notepad2等軟件,如在狀態(tài)欄顯示為CR+LF則為Windows格式,如果顯示為LF則為Linux格式:
- 利用支持?jǐn)U展搜索的編輯器,如Notepad++,查找 :
Linux下查看
- cat命令顯示^M:
[qxhgd@localhostcrlf]$cat-vtest-dos.sh
#!/bin/bash^M
echo"HelloWorld!"^M
顯示Tab:
[qxhgd@localhostcrlf]$cat-Ttest-dos.sh
#!/bin/bash
^Iecho"HelloWorld!"
- od命令od可以單獨(dú)使用:
[qxhgd@localhostcrlf]$od-ctest-dos.sh
0000000#!/bin/bash
ech
0000020o"HelloWorld!
0000040"
0000041
也可以和cat配合使用:
cattest-dos.sh|od-c
- hexdump命令
[qxhgd@localhostcrlf]$hexdump-ctest-dos.sh
0000000#!/bin/bash
ech
0000010o"HelloWorld!
0000020"
0000021
- vim
狀態(tài)欄下會(huì)顯示:
"test-dos.sh" [noeol][dos] 2L, 33B
命令模式下執(zhí)行set ff:
fileformat=dos
- gedit
-- 首先使用gedit打開文件:
[qxhgd@localhostcrlf]$gedittest-dos.sh
-- 搜索 ,如果搜索到了就表示是DOS格式:
格式修改
Windows下
-
可以利用編輯器修改,如Visual Studio Code,點(diǎn)擊狀態(tài)欄右下方的CRLF,選擇“行尾序列”可修改為LF的格式;
-
有的編輯器,如Notepad2,有Line Endings可供選擇:
-
利用支持?jǐn)U展搜索的編輯器,如Notepad++,可將 替換掉:
Linux下
利用特殊工具轉(zhuǎn)換
- vimvim命令模式下,執(zhí)行set ff=unix或set fileformat=unix即可將DOS格式轉(zhuǎn)換為unix格式;
- dos2unix需要額外用命令安裝,一般的Linux系統(tǒng)不帶的;unix2dos與dos2unix作用正相反。
[qxhgd@localhostcrlf]$dos2unixtest-dos.sh
dos2unix:convertingfiletest-dos.shtoUnixformat...
[qxhgd@localhostcrlf]$dos2unix-ntest-dos.shtest-unix.sh
dos2unix:convertingfiletest-dos.shtofiletest-unix.shinUnixformat...
- tofrodos這一組一共兩個(gè)命令,todos和fromdos,fromdos用來將dos轉(zhuǎn)換成unix格式,todos是用于將unix轉(zhuǎn)換成dos格式的,使用例子如下:
[qxhgd@localhostcrlf]$fromdostest-dos.sh
利用文本處理工具
- sed
-- 轉(zhuǎn)換一個(gè)文件:
sed‘s/^M//’test-dos.sh>test-unix.sh
-- 轉(zhuǎn)換多個(gè)文件:
find./-typefprint0|xargs-0sed-i's/^M$//'
- vi
-- 1、vi test-dos.sh-- 2、:%s/^M//g或:%s/ //g
-- 3、esc退出 :wq保存退出
其中^M 必須是同時(shí)按 Ctrl+V+M(按住Ctrl鍵,然后依次V、M鍵)或依次按Ctrl + V然后Ctrl + M,表示回車。
- tr
tr-d"15"test-dos.sh
cattest-dos.sh|tr-d‘/r'>test-unix.sh
tr-d'
'test-unix.sh
- perl
cattest-dos.sh|perl-pe‘~s/
//g’>test-unix.sh
perl-p-e's/
//g'test-dos.sh>test-unix.sh
perl-pi-e's/
/
/g'test-dos.sh
原文標(biāo)題:一文搞清UNIX/Linux與Windows文件換行符格式差異
文章出處:【微信公眾號(hào):一口Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
Linux
+關(guān)注
關(guān)注
87文章
11292瀏覽量
209323 -
WINDOWS
+關(guān)注
關(guān)注
3文章
3541瀏覽量
88622 -
格式
+關(guān)注
關(guān)注
0文章
23瀏覽量
16884 -
UNIX
+關(guān)注
關(guān)注
0文章
296瀏覽量
41480
原文標(biāo)題:一文搞清UNIX/Linux與Windows文件換行符格式差異
文章出處:【微信號(hào):yikoulinux,微信公眾號(hào):一口Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論