一連のUnicode文字を見つけるためにgrepを使用する方法は?
キャラクターの例を見ました。Unicode値で文字をgrepする方法は?
シェルの交換方法以外の方法に興味があります。
シェルの交換は少し制限的なように見えるため、たとえば\u80コードポイントなどのグラフィックスではなくUnicode文字では機能しないようです。
この方法を特定の範囲内で動作させることができますが、\u80(Unicodeコードポイント80)などの非グラフィック文字を含まない点までのみ可能です。
$ echo grep [$'\u41'-$'\u45']
grep [A-E]
$ echo 4142434445|xxd -r -p
ABCDE
$ echo 4142434445|xxd -r -p | grep [$'\u41'-$'\u45']
ABCDE
$メソッドはシェルレベルで置換を使用するため、たとえば文字を見つけるのには機能しません\u0080-\uFFFF
。\u0080
これは、シェルが文字を表示できないと機能しないためです。
ugrep は Debian の apt-get を通して利用できますが、VPS の私の Ubuntu バージョンでは動作しません。もう一度テストしてみてください。
ノート シェルの置き換え方法は制御文字に対して機能するため、さまざまな制御文字やUnicode文字、そして間違いなくugrepもうまく機能します。最初にシェル置換のためにgrepを使用しようとしたとき、私は知らない間違ったバイトを入力しました。例echo 418042| xxd -r -p
が示されており、A▒B
これがうまくいくと思い、grepを試しています。だからgrepに間違ったデータを渡しています。 80は\u80のutf-8ではありません。高いビット文字(£)などのエコーは、UTF-8を出力していることを明確に示します。 £をecho £ | xxd -p
表示するc2a3はc2a30a
utf-8です。正しいバイトを入力すると機能します。たとえば、c280
\u80も echo $'\u80'
機能します。このページは、utf-8とUnicodeコードポイントのマッピングを示すのに適しています。https://www.utf8-chartable.de/
シェル置換が機能している間にシェル置換以外の操作を実行する回答があることを嬉しく思います。代替案があれば良いだろうからです。
ベストアンサー1
gnu-grepと同様のエントリではPCREオプションを使用し、次の-P
構文
\x{HHHH}
を使用できます。
$ grep -o -P '[\x{0410}-\x{042F}]+' # same as: grep -o -P '[А-Я]+'
абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕ
=> АБВГДЕ