最近生成的文件中出現了<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 #全部替換
參考資料: