我正在创建一个 shell 脚本 (KSH),我想将没有 BOM 的 UTF-8 csv 文件转换为带有 BOM 的 UTF-8 csv 文件(或者只是将 BOM 添加到没有 BOM 的文件中)。
谢谢你的帮助
我正在创建一个 shell 脚本 (KSH),我想将没有 BOM 的 UTF-8 csv 文件转换为带有 BOM 的 UTF-8 csv 文件(或者只是将 BOM 添加到没有 BOM 的文件中)。
谢谢你的帮助
您可以通过在文件内容之前输出它来添加您想要的 aBOMination,例如在添加 aBOMination 时从 stdin 复制到 stdout:
#!/bin/ksh
printf '\357\273\277'
cat
但是你为什么要这样做呢?这几乎总是一个坏主意。
这是另一种解决方案,它仅在不存在时才写出新的 aBOMination。正如你所看到的,它很复杂......这只是为什么首先使用 aBOMinations 是一个坏主意的原因之一。它可能需要 GNU od
。
#!/bin/ksh
# write a new aBOMination
printf '\357\273\277'
# now read the first 3 bytes of the original file
set -- $(od -N3 -to1)
if [ "$2" = 357 -a "$3" = 273 -a "$4" = 277 ]; then
# there already was an aBOMination.
# Absorb it and write out the rest of the file
cat
else
# the first three bytes of the file were normal. Output them.
if [ $# -lt 3 ]; then
# file was empty
:
elif [ $# -eq 3 ]; then
# file had only one byte
printf "\\$2"
elif [ $# -eq 4 ]; then
# file had only two bytes
printf "\\$2\\$3"
else
# file had 3 or more bytes.
# Ouput the first 3
printf "\\$2\\$3\\$4"
# then the rest
cat
fi
fi