我有一个生成许多文件的大型脚本,由于缺少 BOM,其中一部分无法运行。我必须使用名为 pagecounts-${_date} 的文件,它最终是这样创建的:
cat $TMPDIR/*.filtered > $TMPDIR/pagecounts-${_date}
然后,我使用排序并尝试在另一个脚本中使用它,但我收到 BOM 错误。我的问题是,我可以在现有文件的开头添加 utf-16 的 BOM 吗?如果是,我该如何实现?
我正在考虑使用这样的临时文件:
cat $TMPDIR/*.filtered > $TMPDIR/tmp_pagecounts-${_date}
echo '\ufeff' > $TMPDIR/pagecounts-${_date}
cat $TMPDIR/tmp_pagecounts-${_date} | sort >> $TMPDIR/pagecounts-${_date}
但这种方式似乎切断了一些UTF-16字符。
最佳答案
您可以使用 echo -e
按原样打印 Unicode utf-16
字符序列
sed "1s/^/$(echo -ne '\ufeff')/" "$TMPDIR"/pagecounts-${_date}
或者也使用printf
sed "1s/^/$(printf '\ufeff')/" "$TMPDIR"/pagecounts-${_date}
在同一文件上执行hexdump -c
或hexdump -C
后,确认相同的序列是准确的
echo -ne '\ufeff' | hexdump -c
0000000 355 237 277 355 273 277
0000006
您也可以确认这些字节在应用到文件时是一致的。
上面的 sed
命令只是将文件内容打印到标准输出,要就地修改文件,请使用 -i
标志(-i ''
是 macOS 的 sed
所必需的)
sed -i '' ...
关于linux - 如何使用 sed 在现有文件的开头添加 UTF-16 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49346675/