問題復現
拿到的文件中包含了大量的\r
、\n
、\t
等字元,形如:
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n <title>歷史賬單</title>\r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<script type="text/javascript" src="/pages/js/jquery-1.11.3.min.js"></script>\r\n<script type="text/javascript" src="/cms/up3/js/jquery.flashSlider-1.0.min.js"></script>\r\n<script type="text/javascript" src="/cms/up3/js/common.js">
看起來亂糟糟的,很不直觀。
問題分析
簡單的說是由於Windows與Linux對換行
的表示不一樣導致的。詳細的可以參考這篇文章linux下與windows下的換行符。這裡不做過多的探究。我們只需要把這些字元替換成Linux
中對應的表示即可。在Ubuntu
中我們使用\r
來表示換行
(關於換行與回車可以參考回車與換行的區別),這裡我們還要注意一點就是即使你在Windows
環境下,對於Vim
來說都是都是有固定的表示的。可以參考這個Why is r a newline for Vim?,這裡我們只要知道:我們把\r\n
換成\r
就可以了。
問題解決
上面的問題多處於Linux
機器上,我們使用Vim
來進行處理。步驟如下:
- 把有如上問題的文件丟進
Vim
編輯器 - 在
Vim
中使用如下命令來處理\r\n
(記得轉義),替換成\r
的換行
:1,$s/\\r\\n/\r/g
- 同樣的方式處理
\t
,將至替換成四個空格
:1,$s/\\t/ /g
方法詳解
上面的解決方法是利用Vim的替換功能將字元替換成對應的正確的表示。其中:
1,$s/
表示從第一行到最後一行開始匹配,匹配的內容是後面的正則。
/\\r\\n/\r/g
這裡是一個正則以及要替換的內容。遵循這樣的格式:/要正則匹配的部分/要替換成的部分/g
參考資料
- linux下使用vim替換檔案中的^M換行符
- vim 查詢和替換命令 替換/n和n
- 回車與換行的區別
- Why is r a newline for Vim?