編集:コメントのためウォーレンヤングそうすることで、私は非常に関連した点については明確ではないことに気づきました。私の検索文字列はすでにUTF-16LEの順序です(UTF-16BEのUnicodeコードポイントの順序ではありません)。したがって、Unicodeの問題は多少議論の余地があります。
たぶん私の問題は(文字の代わりに)グループのバイトをgrepする方法です。2バイト、すなわち。では、UTF-16LEは\x09\x0A
TAB、改行文字として扱われず、正確にUTF-16LEの2バイトとして扱われますかऊ
? ...注:UTF-16はお互いのゲートペアを気にする必要はないので、2バイトのチャンクは問題ありません。
以下は、この3文字の文字列のパターン例ですऊपर
。
\x09\x0A\x09\x2A\x09\x30
しかし、文字列がファイルにあっても何も返しません。
(原文はこちらです)
フォーマットモードを使用してUTF-16LEファイルを検索すると、\x00\x01\x...etc
一部の値に問題があります。sed
を使用してきましたが、grep
UTF-8ロケールは特定のUTF-16LE値をASCII文字として認識します。 UTF-16の使用が制限されているため、UTF-8に再エンコードできません。
例えば。このテキストऊ
(UNICODE 090A)では単一文字ですが、2つのASCII文字の合計ऊ
として扱われます。 \x09
\x0A
grep
-P
パターンを検索する(perl)オプションがありますが、\x00\x...
同じASCII解釈を取得します。
UTF-16モードで検索する方法はありますかgrep -P
?あるいは、Perlや他のスクリプトで検索する方が良いかもしれません。
grep
コンパクトなので最も魅力的なようだが、どんな作業をしてもこの好みがひっくり返る。
ちなみに、私のऊ
例ではリテラル文字列を使用していますが、実際の使用には正規表現スタイルの検索が必要です。だからこのPerlの例私は私が望むものではありませんが、ファイルをUTF-16として扱いますが...ファイルを開いて閉じる必要がない方が良いです...perl
正規表現検索などの基本的な操作のためのより簡単な方法があると思います。私はこの簡潔な構文を持つものを探しています。
ベストアンサー1
私の答えは基本的に次のようになります。このトピックに関するその他の質問:
$ iconv -f UTF-16LE -t UTF-8 myfile.txt | grep pattern
他の質問と同様に、行末変換が必要になる場合がありますが、要点は、基本ツールを直接使用できるようにファイルをデフォルトのエンコードに変換する必要があることです。