如何使用sed在现有文件的开头添加UTF-16字符?

时间:2018-03-18 10:09:16

标签: linux shell sed

我有一个生成许多文件的大脚本,由于缺少BOM,部分文件无效。我必须处理名为pagecounts的文件 - $ {_ date},最终创建如下:

foreach($pages as $page_number => $items){
    /* Your code */
}

然后,我使用sort并尝试在另一个脚本中使用它,但是我得到了BOM错误。我的猜测是,我可以在现有文件的开头添加utf-16的BOM吗?如果是,我该如何实现?

我在考虑使用这样的临时文件:

cat $TMPDIR/*.filtered > $TMPDIR/pagecounts-${_date}

但是这种方式似乎会削弱一些UTF-16字符。

1 个答案:

答案 0 :(得分:1)

您可以使用echo -e按原样打印Unicode utf-16字符序列

sed "1s/^/$(echo -ne '\ufeff')/" "$TMPDIR"/pagecounts-${_date}

或使用printf

sed "1s/^/$(printf '\ufeff')/" "$TMPDIR"/pagecounts-${_date}

在同一档案上执行hexdump -chexdump -C后确认相同的序列是准确的

echo -ne '\ufeff' | hexdump -c
0000000 355 237 277 355 273 277
0000006

您也可以确认这些字节在应用于文件时保持一致。

以上sed命令只是将文件内容打印到stdout,要使用-i标记就地修改文件(mac -i ''需要sed {{ 1}})

sed -i '' ...