2014-12-22 2 views
0

�을 ASCII가 아닌 문자 집합으로 유닉스 파일에서 검색 할 수 있습니까?Unix에서 특정 비 ASCII 문자 검색

이 두 문자를 모두 bash로 검색하여 두 개의 공백으로 바꾸고 싶습니다.

sed -i 's/[�]/\ \ /g' filename

는 일을 마지막으로

답변

1

파일에서 자신의 인코딩에 따라 달라집니다 그 문자를 검색하는 방법을했다. 파일이 UTF-8 인코딩 인 경우 UTF-8 로켈을 설정하고 쉘에서이를 간단히 일치시킬 수 있습니다. GNU는 (리눅스의 기본을) 나오지 가정하면, 명령 행은 다음과 같이 표시됩니다이를 위해

LANG=C.UTF-8 sed -i 's/[�]/ /g' filename 

이 작동하려면, 당신은 UTF-8 호환 쉘이 될 것을 예를 들어, 이렇게해야한다 echo 'ï' | wc -c3 (두 개의 UTF-8 코드 단위와 개행)을 출력합니다.

+0

echo 'ï'| wc -c는 쉘 2에서 나를 제공한다. –

+0

우선, 'wc -c'는 * 문자가 아닌 * bytes *를 계산하므로 멀티 바이트 문자가 여러 바이트로 구성 될 수 있으므로'-m'을 사용해야한다. ,'echo'는 문자열 * plus * 개행을 출력하므로 2는 여기에 예상되는 출력입니다. 개행을 인쇄하지 않으려면'echo -n'을 사용하십시오. – Carpetsmoker

+0

@Carpetsmoker 답변은 OP가 UTF-8 환경/쉘을 사용하고 있는지 확인하기 위해 바이트를 계산하는 ** 의도 **가있는'wc -c'를 지정합니다. 앞으로는 이해할 수없는 답변을 편집하기 전에 의견을 말하십시오. – user4815162342

1

Latin-1 도구를 사용하여 UTF-8 데이터를보고있는 것 같습니다.

$ echo -n '�' | iconv -t iso-8859-1 | xxd 
0000000: efbf bd       
: 따라서, 귀하의 질문에 내가 당신의 질문을 이해하는 데 무엇 기본적으로 잘못 정의하지만, 당신이 시도, 여기

perl -CSD -nle 'if m/^\x{FFFD}/ { print $ARGV; close() }' files ... 

같은 것을 수정 UTF-8 대체 문자가 포함 된 파일을 찾으려면 가정

efbfbd에 대한 인터넷 검색은 빠르게 조회수 가운데 http://www.fileformat.info/info/unicode/char/0fffd/index.htm을 가져 왔습니다.

U + FFFD는 기본적으로 오류 코드입니다. 올바르게 이 아니어야합니다.을 찾아서 교체하십시오. 어떤 인코딩 단계가 실패하고 생성되었는지 알아 내서이를 수정해야합니다.