以下を使用してファイルからUTF-8 BOMを削除したいと思います。
sed '1 s/\xEF\xBB\xBF//' old.java > tmp.java
しかし、それはうまくいきませんでした。 kshを使用してAIX 7.1で実行されています。
答え1
\x
POSIX では、基本正規表現の動作は指定されません。一部の実装ではこれを使用して16進バイト表現を導入し、一部の実装ではこれをx
。
POSIXlyでは、次のことができます。
(export LC_ALL=C
sed "s/$(printf '\357\273\277')//") < file.in > file.out
ここでも幸運を楽しむこともできます。
< file.in iconv -t UTF-16LE | iconv -f UTF-16 > file.out
これはAIXで動作するかどうかは言えませんが、GNUの場合はBOMを持つUTF-16をiconv
意味し、UTF-16
UTF-16LEはUTF-16リトルエンディアンを意味するため、2番目はiconv
最初の-16LE BOMで生成されたUTFを削除します(UTF -16BEでも動作します)
答え2
AIX sed はエスケープ・シーケンス文字を理解していません。AIX sed 文書つまり、ASCII文字のみを認識します。したがって、他のツールを使用する必要があります。
尾
tail -c +4 old.java > tmp.java
アッ
awk '{NR==1{sub(/^\xef\xbb\xbf/,"")}1' old.java > tmp.java
答え3
ここでも同じ問題が発生します。 BOM(UTF-16LE)をファイルから削除する必要があります。最後に、「tr」と8進コードを使用して0xFF 0xFEを表します。
$ cat old.csv
ÿþ"SET01"|"0000001"|"2016-11-15"|""|"0"|""|""|"Data01"
$ echo "ibase=16\nobae=8\nFF" | bc
377
$ echo "ibase=16\nobae=8\nFE" | bc
376
$ cat old.csv | tr -d "\377\376"
"SET01"|"0000001"|"2016-11-15"|""|"0"|""|""|"Data01"
答え4
まだコメントを提示できません。したがって、AIX iconvに依存するプログラムを終了せずに、より強力なソリューションでGNU iconvを使用したい場合は、パッケージを提供できます。
michael@x071:[/home/michael]ar -X64 tv /usr/lib/libiconv.a
rwxr-xr-x 0/0 1032868 Aug 21 16:19 2016 libiconv.so.2
r--r--r-- 0/0 159410 Aug 21 20:09 2016 shr4_64.o
michael@x071:[/home/michael]ar -X32 tv /usr/lib/libiconv.a
rwxr-xr-x 0/0 1010856 Aug 21 16:21 2016 libiconv.so.2
r--r--r-- 0/0 117276 Aug 21 20:09 2016 shr4.o
r--r--r-- 0/0 117526 Aug 21 20:09 2016 shr.o
AIX iconvに依存する(64ビット)プログラムは/usr/lib/libiconv.a(shr4_64.o)を探します(32ビットは/usr/lib/libiconv.a(shr4.o)を探します)。 、GNU iconvなどの/usr/lib/libiconv.a(libiconv.so.2)を確認してください。
michael@x071:[/home/michael]ldd /usr/bin/iconv
/usr/bin/iconv needs:
/usr/lib/libc.a(shr.o)
/usr/lib/libiconv.a(shr4.o)
/unix
/usr/lib/libcrypt.a(shr.o)
michael@x071:[/home/michael]ldd /opt/bin/iconv
/opt/bin/iconv needs:
/usr/lib/libc.a(shr_64.o)
/usr/lib/libiconv.a(libiconv.so.2)
/unix
/usr/lib/libcrypt.a(shr_64.o)
以下を使用して、AIX用のGNU iconvを入手できます。http://www.aixtools.net/index.php/libiconvそして、AIX iconvに関連付けることができます。