私はUnicode表現と大文字と小文字に関係なく、ファイル内の「müller」などの国際的なテキストや中国語のテキストを見つけるのが好きです。
つまり、「ü」がNFC形式またはNFD形式で保存されるかどうかは重要ではありません。
私はgrepがこれを行うことができると思いましたが、少なくともmacOS 10.13.6で利用可能なバージョンは、正規化されたフォーマットを1つしか見つけることができません。
私は単語から代替形式の文字を検索し、UTF8文字の各代替形式を含むツリーを構築し、すべての組み合わせを検索できるAho-Corasickのようなアルゴリズムを使用することはそれほど難しくないと思います。しかし、少なくとも私が試したgrepはそうしませんでした。
これを正しく実行するgrepまたは他のテキスト検索ツールの実装はありますか?
答え1
正規表現エンジン(PCRE2)を使用してこの問題を解決しました。
デフォルトでは、ユーザーの検索文字列をすべての可能なUTF-8およびUTF-16表現に変換するために作成したコードを使用し、必要に応じてエスケープしながら、代わりにそれらをすべて正規表現に結合しました。すべての文字(00
UTF -16 文字バイトなど\x00
)でエンコードされます。
意思決定ツリーを構築する正規表現の特性により、検索速度が大幅に高速化されます。
これにより、ファイルにエンコードされた形式に関係なく、すべてのバイナリファイルから検索文字列を検索できます。
私のプログラムの1つにこの機能が必要なので、プログラミングソリューションも歓迎することに注意する必要があります(これはStackOverflowサイトにある方が良いです)。