精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux與Windows文件換行符的區別

xCb1_yikoulinux ? 來源:CSDN技術社區 ? 作者:花神廟碼農 ? 2022-06-27 15:18 ? 次閱讀
  • 當一個文件在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格式:3281657a-f399-11ec-ba43-dac502259ad0.png328bd0fa-f399-11ec-ba43-dac502259ad0.png
  • 利用支持擴展搜索的編輯器,如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

狀態欄下會顯示:

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

命令模式下執行set ff:

fileformat=dos
  • gedit

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

[qxhgd@localhostcrlf]$gedittest-dos.sh

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

格式修改

Windows下

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

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

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

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】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

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

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

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

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

    Labview怎么刪除數組元素內的換行符,請各位大神分享。謝謝了!

    Labview怎么刪除數組元素內的換行符,已經搞定了,謝謝!
    發表于 01-21 11:00

    MINI板使用WIFI模塊例程發現回車換行符不見了

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

    linux文件的fgets與gets操作

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

    這段代碼意思是不是當換行符輸入時循環跳過?

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

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

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

    請問一下Java中平臺無關的換行符是什么?

    Java中平臺無關的換行符是?
    發表于 06-01 11:33

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

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

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

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

    Linux文件文件描述概述

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

    python輸出換行符\n怎么用

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