去除文件中

最近生成的文件中出現了<feff>亂碼,並且單個文件中出現不止一次,在vim中打該文件顯示<feff>,而在idea中則顯示一個「-」,對數據處理形成了極大的困擾,經過使用其它編輯器打開發現,Windows記事本不出現亂碼,notepad++不出現亂碼,那麼極有多是該亂碼位置寫了一些不可見的標誌字符。html

在Windows下使用winhex打開該文件查看亂碼位置的十六進制格式數據爲EF BB BF,經過百度瞭解到是UTF8的bom信息正則表達式

嘗試過用notepad++轉換格式去除bom信息,無果,我生成的文件自己編碼就是utf8 without bom,那麼只好經過shell來去除這個煩人的字符:shell

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

不過這個命令偶爾失效,在我一開始用它就無論用的狀況下,我試瞭如下命令vim

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

 成了!bash

不過命令2只成功了1次,以後再用命令1就徹底o**k了。玄學問題。。。編輯器

命令詳解:ide

        sed的命令格式: sed [-nefri] [動做]編碼

             選項與參數:idea

                     -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,附許多經典評論

相關文章
相關標籤/搜索