ASCII가 아닌 유니코드 문자가 포함된 디렉터리에서 파일을 찾으려고 합니다. 내가 찾아야 할 정확한 캐릭터가 무엇인지 미리 알지 못했습니다.
개념적으로 이것은 간단한 작업이어야 합니다. 정규 표현식과 일치하는 모든 파일을 찾으세요 [^\0-\x7f]
. 그러나 나는 실제로 이것을 수행하는 것을 생각해 낼 수 없습니다.
내가 생각할 수 있는 가장 가까운 것은 다음과 같습니다.
find . -type f -exec grep -Plv '[\0-\x7f]' {} \;
대부분의 일반 텍스트 파일은 빈 줄의 일치 항목으로 인해 나열됩니다.
스위치 -e
는 와 결합하는 것을 허용하지 않으므로 -P
that 을 사용할 수 없으며 -e '[\0-\x7f]' -e '^$'
정규식을 로 변환하는 것은 [\0-\x7f]|^$
이제 "or"이기 때문에 분명히 잘못된 것입니다.
이런 문자를 검색할 수 있는 다른 방법이 있나요?
답변1
을 사용하면 grep -Pv '[\0-\x7f]'
요청한 라인에 -v
( ) ASCII 문자가 포함되지 않습니다. 이는 ASCII가 아닌 문자가 포함된 줄과 다릅니다. 이것만 물어보세요.
LC_ALL=C grep -lP '[^\0-\x7f]'
코드 포인트 범위 대신 ASCII 로케일에서 인쇄할 수 없는 문자를 요청할 수 있습니다. 이는 거의 동일합니다(제어 문자도 포함됨).
LC_ALL=C grep -l '[^[:print:]]'
동일하고 보다 정교한 접근 방식은 전체가 ASCII 문자로 구성된 줄을 검색하고 일치 항목을 반대로 바꾸는 것입니다.
LC_ALL=C grep -vlP '^[\0-\x7f]*$'