<kbd id="9plqc"><label id="9plqc"></label></kbd>

        <th id="9plqc"></th>
        1. <center id="9plqc"><video id="9plqc"></video></center>
          <sub id="9plqc"><form id="9plqc"><pre id="9plqc"></pre></form></sub>
          <nav id="9plqc"><form id="9plqc"><legend id="9plqc"></legend></form></nav>
          批量將目錄下所有文件進行 dos/unix 格式轉換 您所在的位置:網站首頁 mac如何改文件格式 批量將目錄下所有文件進行 dos/unix 格式轉換

          批量將目錄下所有文件進行 dos/unix 格式轉換

          2023-09-01 17:59| 來源: 網絡整理| 查看: 265

          一、問題產生的原因:

          DOS/Windows和Linux/Unix的文件換行回車格式不同,基于 DOS/Windows 的文本文件在每一行末尾有一個 CR(回車)和 LF(換行),而 UNIX 文本只有一個換行。

          對于換行這個動作,unix下一般只有一個0x0A表示換行("\n"),windows下一般都是0x0D和0x0A兩個字符("\r\n"),蘋果機(MAC OS系統(tǒng))則采用回車符CR表示下一行(\r)

          Unix系統(tǒng)里,每行結尾只有“”,即“\n”; Windows系統(tǒng)里面,每行結尾是“”,即“\r\n”; Mac系統(tǒng)里,每行結尾是“”,即“\r”。 一個直接后果是,Unix/Mac系統(tǒng)下的文件在Windows里打開的話,所有文字會變成一行;而Windows里的文件在Unix下打開的話,在每行的結尾會多一個^M字符。即 "\r" = ^M

          Dos和windows采用回車+換行 CR+LF(\r\n)表示下一行,即^M$($不是換行符的表示,換行符沒有表示出來,$是文本結束EOF的表示);

          UNIX/Linux采用換行符LF表示下一行,即\n;LF使用'\n'符號表示, ASCII代碼是10, 十六制為0x0A.? MAC 系統(tǒng)則采用回車符CR表示下一行,即\r;CR用符號'\r'表示, 十進制ASCII代碼是13, 十六進制代碼為0x0D;

          所以Windows平臺上換行在文本文件中是使用 0d 0a 兩個字節(jié)表示, 而UNIX和蘋果平臺上換行則是使用0a或0d一個字節(jié)表示.由于dos風格的換行使用\r\n,把這樣的文件上傳到unix,有些版本的vi不能識別\r,所以vi顯示時在行尾會出現(xiàn)^M出來,但是有些就能識別\r\n,正常顯示回車換行。

          二、用sed進行轉換

          以下 sed 調用將把 DOS/Windows 格式的文本------->>可信賴的 UNIX 格式:??

          sed -i 's/^M$//g' 即尋找以 ^M 結尾的行,string^M\n----》string\n.

          sed -i 's/\r$//g' ? ?#這個命令也可以。

          反過來,也可以把UNIX---->DOS. ? ?\n----->\r\n.

          sed -i 's/$/\r\n/' ? ? ?#在該腳本中,'$' 規(guī)則表達式將與行的末尾匹配,而 '\r' 告訴 sed 在其之前插入一個回車。在換行之前插入回車,立即,每一行就以 CR/LF 結束。 1. vim中查詢修改文件編碼格式 :set ff 查看當前文本的模式類型,一般為dos,unix :set ff=dos 設置為dos模式, 也可以用 sed -i 's/$/\r/'? :set ff=unix 設置為unix模式,也可以用一下方式轉換為unix模式:sed -i 's/.$//g' :set fileencoding查看現(xiàn)在文本的編碼 :set fenc=編碼 轉換當前文本的編碼為指定的編碼 :set enc=編碼 以指定的編碼顯示文本,但不保存到文件中。這里的“編碼”常見為gbk utf-8 big5 cp936 2. 在Linux/Window下批量處理文件格式 2.1 使用 sed + grep?

          #sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目錄`?

          eg:??sed -i 's/$/\r/g' `grep '$' -rl .` ? #批量轉unix to dos (親測可用)

          2.2 使用find + sed

          eg: find . -name "*.tcl" | xargs sed -i 's/\r$//g' ? ?#批量轉dos to unix (親測可用!)

          2.3 ?在git 下,對已經編輯過的文件進行轉換。

          git status |grep ".tcl"|sed "s/modified: ? //"|xargs sed -i "s/\r$//g"

          其他方法:? 在Vim顯示^M字符的原因:在Windows下?lián)Q行使用CRLF兩個字符來表示,其中CR為回車(ASCII=0x0D),LF為換行(ASCII=0x0A),而在Linux下使用LF一個字符來表示。在Linux下使用vi來查看一些Windows下創(chuàng)建的文本文件時,有時會發(fā)現(xiàn)在每一行尾部有^M字符,其實它是顯示CR回車字符。 sublime 設置為:windows使用的CRLF,unix使用的是 LF。按你的情況,應該在Setting-User中設置"default_line_ending":"unix"就可以解決這個問題。 下面有一些方法可以處理這種問題(其實這只是Windows和Linux平臺表示回車的方法不一樣而已!!!!)。 2.1 使用dos2unix 一般Linux發(fā)行版中都帶有這個小工具,只能把DOS轉換為UNIX文件,命令如下: # dos2unix dosfile.txt ? ? ? 命令會去掉行尾的^M符號。 2.2 使用tr 使用tr命令拷貝標準輸入到標準輸出,替換或者刪除掉選擇的字符,只能把DOS轉換為UNIX文件,命令如下: # tr -d ‘\r’< dosfile.txt > unixfile.txt 2.3 使用vim Vim是一個vi的改進版本,可以運行在Windows和Linux平臺上,使用方法如下: DOS轉UNIX::setfileformat=unix UNIX轉DOS::setfileformat=dos 你也可以使用ff來替代fileformat 注:為了能讓vim可以自動識別DOS和UNIX文本文件格式,可以在.vimrc(Linux)或_vimrc(Windows)配置文件中加入如下一行設置: ? ? ? ? ?setfileformats=dos,unix ? ? ? ? ?設置完成后,使用vim打開DOS文本文件就不會顯示^M字符了。 2.4 使用sed ? ? ? ? ?在DOS文件格式中使用CR/LF換行,在Unix下僅使用LF換行,sed替換命令如下: ? ? ? ? ?DOS轉UNIX:$ sed ‘s/.$//’dosfile.txt > unixfile.txt ? ? ? ? ?UNIX轉DOS:$ sed ’s/$/\r/’unixfile.txt > dosfile.txt 2.5 使用Perl ? ? ? ? ?Perl是相當直接,你添加或刪除掉文件每行結尾的CR字符。 ? ? ? ? ?DOS轉UNIX:perl -p -e ‘s/\r$//’< dosfile.txt > unixfile.txt ? ? ? ? ?UNIX轉DOS:perl -p -e ‘s/$/\r/’< unixfile.txt > dosfile.txt 總結 ? ? ? ? ?還有其它DOS和UNIX文本文件的轉換方法,我個人推薦使用vim命令。但是,對于大型的文件,推薦使用perl工具,你也不希望在vim或Emacs中打開幾個G的文本文件。


          【本文地址】

          公司簡介

          聯(lián)系我們

          今日新聞

          推薦新聞

          專題文章
            CopyRight 2018-2019 實驗室設備網 版權所有
            黄色免费网站在线看,韩国精品在线观看,韩国美女一区二区,99国产热 兴安县| 盐亭县| 永州市| 伊川县| 通河县| 永靖县| 固镇县| 大渡口区| 固安县| 乐平市| 中牟县| 水城县| 工布江达县| 金溪县| 新丰县| 黎平县| 昭觉县| 宜良县| 苍梧县| 定襄县| 黄骅市| 景泰县| 馆陶县| 清涧县| 平顶山市| 长子县| 米林县| 象山县| 周宁县| 瓮安县| 白沙| 安乡县| 都兰县| 湘潭县| 花莲县| 郑州市| 龙游县| 昆山市| 东源县| 万源市| 贵阳市| http://444 http://444 http://444 http://444 http://444 http://444