쉘 스크립트 출력에서 ​​를 제거하는 방법

쉘 스크립트 출력에서 ​​를 제거하는 방법

가 쉘 스크립트 출력에 나타납니다. 누군가 출력에서 ​​이러한 특수 문자를 제거하는 방법을 도와줄 수 있습니까?

참고: 출력을 txt 파일에 저장하고 메일을 통해 출력을 보냅니다.

답변1

ISO8859-1에서 0xef 0xbb 0xbf로 인코딩됩니다.

$ printf %s '' | iconv -t ISO8859-1 | hexdump -C
00000000  ef bb bf                                          |...|
00000003

이 3바이트 시퀀스는 U+FEFF ZERO WIDTH NO-break SPACE 줄바꿈 없는 공백 문자의 UTF-8 인코딩이기도 합니다.

$ printf %s $'\ufeff' | iconv -t UTF-8 | hexdump -C
00000000  ef bb bf                                          |...|
00000003

U+FEFF 문자는 다음과 같이 사용됩니다.바이트 순서 표시(BOM)을 UTF-16으로 사용합니다. UTF-8에서는 의미가 없지만 Microsoft 텍스트 파일에서는 이러한 내용을 볼 수 있습니다(참조:UTF-8 파일에서 BOM을 제거하는 방법은 무엇입니까?).

이는 일부 UTF-16으로 인코딩된 텍스트가 UTF-16 대신 UCS-2LE/BE 또는 UTF-16LE/BE로 UTF-8로 디코딩되는 경우에도 발생합니다.

$ printf X | iconv -t UTF-16 | iconv -f UTF-16LE -t UTF-8 | hexdump -C
00000000  ef bb bf 58                                       |...X|
00000004

여기에는 UTF-8로 인코딩된 BOM이 있고 디스플레이 장치에서는 텍스트가 ISO8859-1로 인코딩되어 렌더링된다고 가정 하거나 이중 UTF-8 인코딩이 있습니다. 즉, 텍스트는 이미 UTF-8로 인코딩되어 있지만 누군가 ISO8859-1이라고 생각하여 UTF-8로 다시 인코딩합니다.

dos2unix첫 번째 경우에는 파이프를 통해 BOM을 제거 하고 Microsoft 파일과 관련된 다른 문제를 해결할 수 있습니다 . 또는 이 3바이트 시퀀스의 발생을 제거할 수 있습니다 sed $'s/\xef\xbb\xbf//g'(셸이 이러한 ksh 스타일을 지원한다고 가정 $'...').

두 번째 경우에는 BOM 문자 가 포함된 콘텐츠를 삭제할 수 있지만 sed 's///g'피해는 이에 국한되지 않을 수 있으므로 다음을 수행하여 이중 UTF-8 인코딩을 반전하는 것이 좋습니다.

<your-file iconv -f UTF-8 -t ISO8859-1 | one-of-the-above

관련 정보