2014-11-24 80 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行为)。