0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux與Windows文件換行符的區(qū)別

xCb1_yikoulinux ? 來源:CSDN技術(shù)社區(qū) ? 作者:花神廟碼農(nóng) ? 2022-06-27 15:18 ? 次閱讀
  • 當(dāng)一個文件在Windows和Linux上交替操作后,經(jīng)常遇到一些莫名其妙的問題,如shell腳本無法執(zhí)行,找不到shell腳本等問題,本文謹(jǐn)就這一問題做一總結(jié),供各位參考;
  • 本文作者: 花神廟碼農(nóng)
  • 博客地址,https://blog.csdn.net/qxhgd。

格式差異

  • 換行符是行尾 (EOL),是一個特殊的字符或字符序列,表示一行文本的結(jié)尾和新行的開頭;
  • 表示換行符的實際代碼因操作系統(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)下會被顯示為 ^M。

后文僅以test-dos.sh文件為例來說明,具體內(nèi)容如下:

#!/bin/bash
echo"HelloWorld!"

格式影響

直觀影響

  • Unix/Mac系統(tǒng)下的文件在Windows里打開的話,所有文字會變成一行(由于Windows下編輯器的處理,這種情況一般不會發(fā)生);
  • 而Windows里的文件在Unix/Mac下打開的話,在每行的結(jié)尾可能會多出一個^M符號;

功能影響

  • 在windows上編寫的shell、python等腳本在Linux上?法正常的執(zhí)?,會有 ^M 相關(guān)提?:
[qxhgd@localhostcrlf]$./test-dos.sh
-bash:./test.sh:/bin/bash^M:badinterpreter:Nosuchfileordirectory
  • 如果在make編譯的時候,執(zhí)行mksh(一個shell文件)可能會有類似下面的提示:
make[3]:./mksh:Commandnotfound

格式查看

Windows下查看

  • 利用編輯器,如Visual Studio Code、UltraEdit、Notepad2等軟件,如在狀態(tài)欄顯示為CR+LF則為Windows格式,如果顯示為LF則為Linux格式:3281657a-f399-11ec-ba43-dac502259ad0.png328bd0fa-f399-11ec-ba43-dac502259ad0.png
  • 利用支持?jǐn)U展搜索的編輯器,如Notepad++,查找 :32954cb6-f399-11ec-ba43-dac502259ad0.png

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

狀態(tài)欄下會顯示:

"test-dos.sh" [noeol][dos] 2L, 33B

命令模式下執(zhí)行set ff:

fileformat=dos
  • gedit

-- 首先使用gedit打開文件:

[qxhgd@localhostcrlf]$gedittest-dos.sh

-- 搜索 ,如果搜索到了就表示是DOS格式:32a28c96-f399-11ec-ba43-dac502259ad0.png

格式修改

Windows下

  • 可以利用編輯器修改,如Visual Studio Code,點擊狀態(tài)欄右下方的CRLF,選擇“行尾序列”可修改為LF的格式;

  • 有的編輯器,如Notepad2,有Line Endings可供選擇:32b0a4f2-f399-11ec-ba43-dac502259ad0.png

  • 利用支持?jǐn)U展搜索的編輯器,如Notepad++,可將 替換掉:32bf8800-f399-11ec-ba43-dac502259ad0.png

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這一組一共兩個命令,todos和fromdos,fromdos用來將dos轉(zhuǎn)換成unix格式,todos是用于將unix轉(zhuǎn)換成dos格式的,使用例子如下:
[qxhgd@localhostcrlf]$fromdostest-dos.sh

利用文本處理工具

  • sed

-- 轉(zhuǎn)換一個文件:

sed‘s/^M//’test-dos.sh>test-unix.sh

-- 轉(zhuǎn)換多個文件:

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

原文標(biāo)題:一文搞清UNIX/Linux與Windows文件換行符格式差異

文章出處:【微信公眾號:一口Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207911
  • WINDOWS
    +關(guān)注

    關(guān)注

    3

    文章

    3503

    瀏覽量

    87884
  • 格式
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    16854
  • UNIX
    +關(guān)注

    關(guān)注

    0

    文章

    296

    瀏覽量

    41335

原文標(biāo)題:一文搞清UNIX/Linux與Windows文件換行符格式差異

文章出處:【微信號:yikoulinux,微信公眾號:一口Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    一文搞清UNIXLinux與Windows文件換行符格式差異

    當(dāng)一個文件WindowsLinux 上交替操作后,經(jīng)常遇到一些莫名其妙的問題,如 shell 腳本無法執(zhí)行,找不到 shell 腳本等問題,本文謹(jǐn)就這一問題做一總結(jié),供各位參考;
    發(fā)表于 11-28 11:31 ?1395次閱讀

    esp32貌似會對換行符(n,0x0a)進行替換,為什么?

    esp32貌似會對換行符(n,0x0a)進行替換。比如我用fwrite發(fā)送數(shù)據(jù): const char data[] = {0x0a};fwrite(data, 1, sizeof(data
    發(fā)表于 06-26 07:36

    一個簡單卻不能忽視的換行符問題

    如圖問題:請問第15行的換行符起什么作用?為什么有它沒有它結(jié)果差別那么大?
    發(fā)表于 01-20 12:35

    labview 如何處理Return鍵按下在輸入框有換行符存在?

    戶名和密碼輸入框還有換行符在,這樣帳號密碼就check不正確了,我的處理方法是把換行符都替換成空字符串,但是感覺在輸入框有換行符在很別扭,請問labview有沒用像C#一樣有e.handled=ture這樣的類似用法不處理該按鍵
    發(fā)表于 07-04 22:58

    字符串中回車換行符的長度問題

    各位大神,我發(fā)現(xiàn)我的字符串控件中,輸入回車換行符時,長度只有一個字節(jié),而不是兩個字節(jié),然后我將我輸入的回車換行符通過串口發(fā)送出去,串口調(diào)試助手那邊收到的并不實現(xiàn)換行功能。請問各位大神,這個該怎么搞?是不是字符串控件哪里需要設(shè)置一
    發(fā)表于 05-12 12:07

    Labview怎么刪除數(shù)組元素內(nèi)的換行符,請各位大神分享。謝謝了!

    Labview怎么刪除數(shù)組元素內(nèi)的換行符,已經(jīng)搞定了,謝謝!
    發(fā)表于 01-21 11:00

    MINI板使用WIFI模塊例程發(fā)現(xiàn)回車換行符不見了

    1.使用WIFI模塊的例程,在發(fā)送測試數(shù)據(jù)給電腦上的網(wǎng)絡(luò)調(diào)試助手,總是會有 0D 0A這樣的換行命令出現(xiàn),后來注釋了LCD的顯示函數(shù)Show_Str(),發(fā)現(xiàn)回車換行符不見了,而且是有一個
    發(fā)表于 02-13 00:53

    linux文件的fgets與gets操作

    從標(biāo)準(zhǔn)輸入里讀取字符串。從標(biāo)準(zhǔn)輸入里讀出字符串并將其存儲在字符數(shù)組str里,直到遇到換行符"\n"或者文件終止EOF如果遇到換行符"\n",從標(biāo)準(zhǔn)輸入到字符數(shù)組str的復(fù)制操作終止。
    發(fā)表于 07-11 08:39

    這段代碼意思是不是當(dāng)換行符輸入時循環(huán)跳過?

    大家好,我想問大家while (getchar()!='\n') continue;這段代碼意思是不是當(dāng)換行符輸入時循環(huán)跳過啊
    發(fā)表于 05-22 12:45

    Labview串口時候數(shù)據(jù)中的0x0A與換行符沖突怎么解決?

    串口數(shù)據(jù)傳輸時候,含有0x0A與換行符沖突,如果關(guān)閉終止,那樣就無法識別串口數(shù)據(jù)結(jié)束,無法識別換行了,請問下大家如何解決?
    發(fā)表于 12-06 21:33

    請問一下Java中平臺無關(guān)的換行符是什么?

    Java中平臺無關(guān)的換行符是?
    發(fā)表于 06-01 11:33

    WCHISPTool對于Hex文件換行符支持哪幾種?

    我這邊需要使用代碼修改模版HEX文件里的數(shù)據(jù),以生成不同版本,不同配置的HEX文件。但是工具就回報”錯誤的文件#3“。搞了好幾個小時才發(fā)現(xiàn),WCHISPTool只支持windows
    發(fā)表于 08-22 07:10

    從git拉取代碼到Windows系統(tǒng)中出錯的原因及其解決辦法

    換行符;Windows 一直使用的 CRLF(即,回車 CR和換行 LF)作為換行符。將 Windows 系統(tǒng)下的
    發(fā)表于 09-29 12:01

    Linux文件文件描述概述

    6.2 Linux文件文件描述概述 在Linux中對目錄和設(shè)備的操作都等同于文件的操作,因
    發(fā)表于 10-18 14:35 ?0次下載

    python輸出換行符\n怎么用

    在Python中,要輸出換行符"n",可以使用print函數(shù)。print函數(shù)可以接受多個參數(shù),并將它們打印到控制臺。 下面是一個使用print函數(shù)輸出換行符的簡單示例: print
    的頭像 發(fā)表于 11-22 10:48 ?1775次閱讀