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^^^^^^^^^^^^