- 當一個文件在Windows和Linux上交替操作后,經常遇到一些莫名其妙的問題,如shell腳本無法執行,找不到shell腳本等問題,本文謹就這一問題做一總結,供各位參考;
- 本文作者: 花神廟碼農
- 博客地址,https://blog.csdn.net/qxhgd。
格式差異
- 換行符是行尾 (EOL),是一個特殊的字符或字符序列,表示一行文本的結尾和新行的開頭;
- 表示換行符的實際代碼因操作系統而異:-- Microsoft Windows,DOS(MS-DOS,PC DOS等)使用CR + LF;-- Unix和類Unix系統使用,包括Linux,OS X,FreeBSD等使用LF;-- MAC系統里,使用CR;
- CR即ASCII碼的0x0D( ),LF為ASCII碼的0x0A( ),DOS下使用( ),類Unix系統下使用( ),DOS系統下的' '在類Unix系統下會被顯示為 ^M。
后文僅以test-dos.sh文件為例來說明,具體內容如下:
#!/bin/bash
echo"HelloWorld!"
格式影響
直觀影響
- Unix/Mac系統下的文件在Windows里打開的話,所有文字會變成一行(由于Windows下編輯器的處理,這種情況一般不會發生);
- 而Windows里的文件在Unix/Mac下打開的話,在每行的結尾可能會多出一個^M符號;
功能影響
- 在windows上編寫的shell、python等腳本在Linux上?法正常的執?,會有 ^M 相關提?:
[qxhgd@localhostcrlf]$./test-dos.sh
-bash:./test.sh:/bin/bash^M:badinterpreter:Nosuchfileordirectory
- 如果在make編譯的時候,執行mksh(一個shell文件)可能會有類似下面的提示:
make[3]:./mksh:Commandnotfound
格式查看
Windows下查看
- 利用編輯器,如Visual Studio Code、UltraEdit、Notepad2等軟件,如在狀態欄顯示為CR+LF則為Windows格式,如果顯示為LF則為Linux格式:
- 利用支持擴展搜索的編輯器,如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可以單獨使用:
[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
狀態欄下會顯示:
"test-dos.sh" [noeol][dos] 2L, 33B
命令模式下執行set ff:
fileformat=dos
- gedit
-- 首先使用gedit打開文件:
[qxhgd@localhostcrlf]$gedittest-dos.sh
-- 搜索 ,如果搜索到了就表示是DOS格式:
格式修改
Windows下
-
可以利用編輯器修改,如Visual Studio Code,點擊狀態欄右下方的CRLF,選擇“行尾序列”可修改為LF的格式;
-
有的編輯器,如Notepad2,有Line Endings可供選擇:
-
利用支持擴展搜索的編輯器,如Notepad++,可將 替換掉:
Linux下
利用特殊工具轉換
- vimvim命令模式下,執行set ff=unix或set fileformat=unix即可將DOS格式轉換為unix格式;
- dos2unix需要額外用命令安裝,一般的Linux系統不帶的;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這一組一共兩個命令,todos和fromdos,fromdos用來將dos轉換成unix格式,todos是用于將unix轉換成dos格式的,使用例子如下:
[qxhgd@localhostcrlf]$fromdostest-dos.sh
利用文本處理工具
- sed
-- 轉換一個文件:
sed‘s/^M//’test-dos.sh>test-unix.sh
-- 轉換多個文件:
find./-typefprint0|xargs-0sed-i's/^M$//'
- vi
-- 1、vi test-dos.sh-- 2、:%s/^M//g或:%s/ //g
-- 3、esc退出 :wq保存退出
其中^M 必須是同時按 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
原文標題:一文搞清UNIX/Linux與Windows文件換行符格式差異
文章出處:【微信公眾號:一口Linux】歡迎添加關注!文章轉載請注明出處。
-
Linux
+關注
關注
87文章
11123瀏覽量
207905 -
WINDOWS
+關注
關注
3文章
3503瀏覽量
87881 -
格式
+關注
關注
0文章
23瀏覽量
16853 -
UNIX
+關注
關注
0文章
296瀏覽量
41335
原文標題:一文搞清UNIX/Linux與Windows文件換行符格式差異
文章出處:【微信號:yikoulinux,微信公眾號:一口Linux】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論