Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 删除文件编码标记,但保留其编码_Linux_Shell_Utf 8 - Fatal编程技术网

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命令由地址和命

我有一个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
命令由地址和命令两部分组成。大多数情况下,您会看到
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