모든 형태의 정규화가 포함된 파일에서 유니코드(UTF-8) 텍스트를 찾을 수 있는 도구는 무엇입니까?

모든 형태의 정규화가 포함된 파일에서 유니코드(UTF-8) 텍스트를 찾을 수 있는 도구는 무엇입니까?

나는 유니코드 표현과 대소문자에 관계없이 파일에서 "müller"와 같은 국제 텍스트나 심지어 중국어 텍스트를 찾는 것을 좋아합니다.

즉, "ü"가 NFC 또는 NFD 형식으로 저장되는지는 중요하지 않습니다.

나는 grep이 이것을 할 수 있다고 생각했지만 적어도 macOS 10.13.6에서 사용 가능한 버전은 정규화된 형식을 하나만 찾을 수 있습니다.

나는 단어에서 대체 형태의 문자를 검색하고 UTF8 문자의 각 대체 형태를 포함하는 트리를 구축한 다음 모든 조합을 검색할 수 있는 Aho–Corasick과 같은 알고리즘을 사용하는 것이 그렇게 어렵지 않을 것이라고 예상합니다. 그러나 적어도 내가 시도한 grep은 그렇게 하지 않았습니다.

이를 올바르게 수행하는 grep 또는 기타 텍스트 찾기 도구의 구현이 있습니까?

답변1

정규식 엔진(PCRE2)을 사용하여 이 문제를 해결했습니다.

기본적으로 사용자의 검색 문자열을 가능한 모든 UTF-8 및 UTF-16 표현으로 변환하기 위해 작성한 코드를 사용하고, 필요에 따라 이스케이프 처리하면서 대안으로 이를 모두 정규식으로 결합했습니다. 모든 문자(예: 00UTF -16자 바이트는 \x00)로 인코딩됩니다.

의사결정 트리를 구축하는 정규식의 특성으로 인해 검색 속도가 상당히 빨라집니다.

이를 통해 파일에 인코딩된 형식에 관계없이 모든 바이너리 파일에서 검색 문자열을 검색할 수 있습니다.

내 프로그램 중 하나에 이 기능이 필요하므로 프로그래밍 솔루션도 환영한다는 점을 언급해야 합니다(그러면 StackOverflow 사이트에 있는 것이 더 좋습니다).

관련 정보