다음을 사용하여 파일에서 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 리틀 엔디안을 의미하므로 두 번째는 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와 연결될 수 있습니다.