1. 程式人生 > >去除檔案中<feff>

去除檔案中<feff>

最近生成的檔案中出現了<feff>亂碼,而且單個檔案中出現不止一次,在vim中打該檔案顯示<feff>,而在idea中則顯示一個“-”,對資料處理造成了極大的困擾,通過使用其它編輯器打開發現,Windows記事本不出現亂碼,notepad++不出現亂碼,那麼極有可能是該亂碼位置寫了一些不可見的標誌字元。

在Windows下使用winhex開啟該檔案檢視亂碼位置的十六進位制格式資料為EF BB BF,通過百度瞭解到是UTF8的bom資訊

嘗試過用notepad++轉換格式去除bom資訊,無果,我生成的檔案本身編碼就是utf8 without bom,那麼只好通過shell來去除這個煩人的字元:

sed -i 's/\xEF\xBB\xBF//g' filename

不過這個命令偶爾失效,在我一開始用它就不管用的情況下,我試了以下命令

sed -i 's/<feff>//g' filename

 成了!

不過命令2只成功了1次,之後再用命令1就完全o**k了。玄學問題。。。

命令詳解:

        sed的命令格式: sed [-nefri] [動作]

             選項與引數:

                     -n:使用安靜(silent)模式。在一般sed的動作中,所有來自stdin的資料一般都會被列出到終端上,但如果加上-n引數後,則只有經過sed特殊                           處理的那一行(或動作)才會被列出來。

                     -e:直接在命令列模式上進行sed的動作編輯

                     -f:直接將sed的動作寫在一個檔案內, -f  filename則可以執行filename內的sed動作

                     -r:sed的動作支援的是延伸型正則表示式語法(預設是基礎正則表示式語法)

                     -i:直接修改讀取的檔案內容,而不是輸出到終端

             function:

                     a:新增

                     c:取代

                     d:刪除

                     i:插入

                     p:列印

                     s:取代   直接進行取代的工作,通常搭配正則表示式

       sed -i 就是直接對文字檔案進行操作

                 

sed -i 's/原字串/新字串'  /home/1.md   #只替換一個
sed -i 's/原字串/新字串/g' /home/1.md   #全部替換

參考資料:

sed -i命令詳解

UTF8最好不帶BOM,附許多經典評論