Linux 如何使用sed在现有文件的开头添加UTF-16字符?
我有一个大的脚本,生成了许多文件,但由于缺少BOM表,部分脚本无法工作。我必须处理名为pagecounts-${u date}的文件,该文件最终是这样创建的:Linux 如何使用sed在现有文件的开头添加UTF-16字符?,linux,shell,sed,Linux,Shell,Sed,我有一个大的脚本,生成了许多文件,但由于缺少BOM表,部分脚本无法工作。我必须处理名为pagecounts-${u date}的文件,该文件最终是这样创建的: cat $TMPDIR/*.filtered > $TMPDIR/pagecounts-${_date} cat $TMPDIR/*.filtered > $TMPDIR/tmp_pagecounts-${_date} echo '\ufeff' > $TMPDIR/pagecounts-${_date} cat $T
cat $TMPDIR/*.filtered > $TMPDIR/pagecounts-${_date}
cat $TMPDIR/*.filtered > $TMPDIR/tmp_pagecounts-${_date}
echo '\ufeff' > $TMPDIR/pagecounts-${_date}
cat $TMPDIR/tmp_pagecounts-${_date} | sort >> $TMPDIR/pagecounts-${_date}
然后,我使用sort并尝试在另一个脚本中使用它,但是我得到了BOM错误。我的问题是,我可以在已经存在的文件的开头添加utf-16的BOM表吗?如果是,我如何才能做到这一点
我正在考虑使用这样一个临时文件:
cat $TMPDIR/*.filtered > $TMPDIR/pagecounts-${_date}
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
按原样打印UnicodeUTF-16
字符序列
sed "1s/^/$(echo -ne '\ufeff')/" "$TMPDIR"/pagecounts-${_date}
或者也使用printf
sed "1s/^/$(printf '\ufeff')/" "$TMPDIR"/pagecounts-${_date}
在同一文件上执行hextump-c
或hextump-c
后,确认相同的顺序是准确的
echo -ne '\ufeff' | hexdump -c
0000000 355 237 277 355 273 277
0000006
您也可以在应用于文件时确认这些字节是一致的
上述sed
命令只需将文件内容打印到标准输出,使用-i
标志修改文件(macOS的sed
需要-i'
)
您突然将
sort
引入了处理添加BOM(并在过程中获胜)的问题中。如果sort
切掉UTF-16字符,这与缺少的BOM完全不同。此外,UTF-16本身非常可疑。哪种Unix程序使用UTF-16编写文件?你在UTF-16地区吗?