Es ist unmöglich (ohne Verwendung einer riesigen Tabelle), ein japanisches Kanji von einem Han-Ideogramm zu unterscheiden, das nicht auf Japanisch verwendet wird (z. B. eine chinesische oder koreanische Variante).
Wenn Sie nur Han-Ideogramme im Basisbereich (\ u4e00 bis \ u9fff) erkennen möchten, werden sie in 3 Bytes codiert. Das erste Byte liegt immer zwischen 0xe4 und 0xe9, das zweite und dritte Byte zwischen 0x80 und 0xbf.
Hier gibt es zwei Schwierigkeiten: Zuerst müssen Sie grep mitteilen, dass Sie nach Bytes und nicht nach Zeichen suchen möchten. Dann müssen Sie die Bytes 0xe4, 0xe9, 0x80 und 0xbf eingeben, um sie in den Ausdruck regexp einzufügen.
Ich habe festgestellt, dass der -P-Schalter beides kann. und die gewünschte Zeile lautet:
Nach der fünften Tabelle sind Kanji die Zeichen zwischen \u4e00und\u9fff
Meine Implementierung von grepscheint nicht in der Lage zu sein, Unicode-Zeichen zu verarbeiten (das ist GNU grep 2.14 unter Archlinux), aber wir können sie trotzdem verwenden \x. Sie können die entsprechenden Codes hier finden oder ein Tool verwenden hexedit, um sie zu erhalten.
Für irgendetwas in unserem oben genannten Interessensbereich wurde e9 be a5"Ungültiges Sortierzeichen" zurückgegeben, also habe ich mir Folgendes ausgedacht:
+1 Das funktioniert auch, aber Pablo war ein bisschen schneller ...
Nicolas Raoul
3
Das ist gleichbedeutend mit grep "[一-龥]". Das Problem ist, dass es vom Gebietsschema abhängt und Kollatierungsregeln verwendet. Das heißt, nur Elemente, für die eine Sortierreihenfolge definiert ist, können im Bereich verwendet oder abgeglichen werden. Der -PSwitch führt unabhängig vom Gebietsschema nur einen binären Abgleich durch. Ein auf dem Gebietsschema basierender Ansatz verwendet eine kulturelle Definition des "Zeichenbereichs", ein auf dem Binärformat basierender Ansatz verwendet eine Codierungswertdefinition des "Bereichs". Besonders bei alphabetischen Skripten ist die Ausgabe sehr unterschiedlich. (hier für Han-Ideogramme ist es in etwa gleichwertig)
Nach der fünften Tabelle sind Kanji die Zeichen zwischen
\u4e00
und\u9fff
Meine Implementierung von
grep
scheint nicht in der Lage zu sein, Unicode-Zeichen zu verarbeiten (das ist GNU grep 2.14 unter Archlinux), aber wir können sie trotzdem verwenden\x
. Sie können die entsprechenden Codes hier finden oder ein Tool verwendenhexedit
, um sie zu erhalten.Für irgendetwas in unserem oben genannten Interessensbereich wurde
e9 be a5
"Ungültiges Sortierzeichen" zurückgegeben, also habe ich mir Folgendes ausgedacht:quelle
grep "[一-龥]"
. Das Problem ist, dass es vom Gebietsschema abhängt und Kollatierungsregeln verwendet. Das heißt, nur Elemente, für die eine Sortierreihenfolge definiert ist, können im Bereich verwendet oder abgeglichen werden. Der-P
Switch führt unabhängig vom Gebietsschema nur einen binären Abgleich durch. Ein auf dem Gebietsschema basierender Ansatz verwendet eine kulturelle Definition des "Zeichenbereichs", ein auf dem Binärformat basierender Ansatz verwendet eine Codierungswertdefinition des "Bereichs". Besonders bei alphabetischen Skripten ist die Ausgabe sehr unterschiedlich. (hier für Han-Ideogramme ist es in etwa gleichwertig)