2014-11-24 81 views
1

我有一個UTF-8(無BOM)編碼的文件。文件正在Windows站點上創建,正在通過SFTP傳輸到Linux服務器。它使用cat -e,我得到的是這樣的:刪除文件編碼標記但保留其編碼

cat -e file.txt 

M-oM-;M-?test13;hbana0Kw;$ 
lala;LjgX$ 

現在,我知道M-oM-;M-?代表UTF-8(無BOM)。有沒有辦法將其從文件中刪除,但preseve其編碼?

+0

如果它不是BOM,則它是實際的字符數據,如果不更改文件的實際內容,則無法刪除它們。但是,它在我看來就像一個BOM。 'cut -b1-3文件|的輸出是什麼? od -ch'? – tripleee 2014-11-24 12:25:53

+0

嗨,它是'0000000 357 273 277 \ nlal \ n bbef 0abf 616c 0a6c 0000010' – NRG 2014-11-24 12:30:40

+0

所以它是一個BOM切換的字節,又稱爲[零寬度無間隔空間](http://www.fileformat .INFO /信息/ Unicode的/炭/ FEFF/index.htm的)。 ('od'的輸出是little-endian格式,更令人困惑的問題。) – tripleee 2014-11-24 12:37:20

回答

1

要從文件的第一行刪除BOM,您可以使用類似sed -e '1 s/^.//' file.txt的東西。

sed命令有兩部分地址和一個命令。大多數情況下,您看到sed沒有地址(這意味着適用於所有行),但您可以通過使用地址將命令操作限制爲僅限特定行。

在這種情況下地址是1意思是第一行。因此,替換僅適用於第一行,並且每行都被打印(因爲這是默認的sed行爲)。