Linux 删除文件编码标记,但保留其编码
我有一个UTF-8(没有BOM)编码的文件。文件正在Windows站点上创建,并通过SFTP传输到Linux服务器。在它上面使用Linux 删除文件编码标记,但保留其编码,linux,shell,utf-8,Linux,Shell,Utf 8,我有一个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)。有没有一种方法可以将BOM表从文件中删除,但保留其编码?要从文件的第一行删除BOM表,可以使用类似以下内容sed-e'1 s/^./'file.txt sed命令由地址和命
cat-e
,我得到如下结果:
cat -e file.txt
M-oM-;M-?test13;hbana0Kw;$
lala;LjgX$
现在,我知道
M-oM-;M-?
表示UTF-8(无BOM)。有没有一种方法可以将BOM表从文件中删除,但保留其编码?要从文件的第一行删除BOM表,可以使用类似以下内容sed-e'1 s/^./'file.txt
sed
命令由地址和命令两部分组成。大多数情况下,您会看到sed
在没有地址的情况下使用(这意味着应用于所有行),但您可以通过使用地址将命令操作仅限于特定行
在这种情况下,地址为
1
,表示第一行。因此,替换仅适用于第一行,并打印每一行(因为这是默认的sed行为)。将文件从Windows传输到Linux时,请应用dos2unix
命令。这将删除BOM表符号,并将行标记转换为Unix样式
dos2unix file.txt
如果不是BOM表,则是实际的字符数据,如果不更改文件的实际内容,则无法删除这些数据。然而,在我看来,它就像一个BOM表。
cut-b1-3文件| od-ch
的输出是什么?嗨,它是0000000 357 273 277\n l a l\n bbef 0abf 616c 0a6c 0000010
所以它是一个切换了字节的BOM,也就是a。(来自od
的输出是little-endian格式,进一步混淆了问题。)太好了,所以我搞错了。现在,有没有办法从Linux端删除它,或者我应该尝试在Windows站点上删除它?sed-e'1s/^./'file.txt