sed를 사용하여 문자 삭제

sed를 사용하여 문자 삭제

Caucasian male lives in Arizona w/ fiancÃÂÃÂÃÂÃÂÃÂ저는 AIX unix에서 작업 중이며 파일에서 인쇄할 수 없는 문자를 제거하려고 합니다. UTF-8 인코딩을 사용하여 Notepad++에서 보면 데이터가 파일에 있는 것처럼 보입니다. 유닉스에서 파일을 보려고 할 때 특수 문자 대신에 ^███^███^███^███^██^██라는 메시지가 나타납니다.

이 특수 문자를 모두 공백으로 바꾸고 싶습니다.

sed를 시도했지만 's/[^[:print:]]/ /g' file문자가 제거되지 않았습니다. 실행하면 내 로캘이 아래에 나열됩니다.locale -a

C
POSIX
en_US.8859-15
en_US.ISO8859-1
en_US

시도해 보았지만 sed -e 's/[^ -~]/ /g' file문자가 제거되지 않았습니다.

작동하는 GNU sed 로케일을 사용하는 다른 스택플로우 답변을 보았지만 UTF-8해당 로케일이 없습니다.

나도 그것을 사용하고 있습니다 ksh.

답변1

현재 로케일이 이미 UTF-8을 문자 집합으로 사용하고 파일이 해당 문자 집합을 사용하여 작성된 경우:

<file LC_ALL=C sed 's/[^ -~]//g'

또는 AIX sed에 제어 문자를 포함하려면 다음을 수행하십시오.

<file LC_ALL=C sed "$(printf "s/[^[:print:]\t\r]//g")"

답변2

다음과 같이 명령을 사용할 수 있습니다 tr.

tr -cd '[:print:]\t\r\n'

설명하다:

`[:print:]'
Any character from the `[:space:]' class, and any character that is not in the `[:graph:]' class
\r -- return
\t -- horizontal tab

based on Centos 7:tris GNU and UTF-8 encoding

$ echo "fiancÃÂÃÂÃÂÃÂÃÂ" | tr -cd '[:print:]\t\r\n'
fianc

$ echo "get ^▒▒^▒▒^▒▒^▒▒^▒▒^▒▒ " | tr -cd '[:print:]\t\r\n'
get ^^^^^^

echo " Caucasian male lives in Arizona w/ fianc▒^▒▒^▒▒^▒▒^▒▒^▒▒^▒^▒▒^▒▒^▒▒^▒▒^▒▒^▒"  | tr -cd '[:print:]\t\r\n'
 Caucasian male lives in Arizona w/ fianc^^^^^^^^^^^^

관련 정보