Zum Beispiel:
sed 's/\u0091//g' file1
Im Moment muss ich tun hexdump
, um die Hex-Zahl zu bekommen und sed
wie folgt zu setzen:
$ echo -ne '\u9991' | hexdump -C
00000000 e9 a6 91 |...|
00000003
Und dann:
$ sed 's/\xe9\xa6\x91//g' file1
echo 馑 | sed s/...//
druckt irgendetwas?sed
der Modifikator g hat, ersetzt er alle Vorkommen auch dann, wenn sie aufeinander folgen. Auch sed sollte es als ein Zeichen zählen, siehe:echo -ne "馑" | wc -m
gives1
. Wenn Sie die Bytes (wc -c
) zählen, wird dies zurückgegeben3
. Habe ich deine Frage richtig verstanden?.
bedeutet "ein Zeichen" oder "ein Byte"?echo 馑 | sed s/...//
gebe ich馑
(nichts wird ersetzt)en_US.UTF-8
, aber nicht unterC
.Perl kann das:
-CS
Aktiviert UTF-8 für Standardeingabe, -ausgabe und -fehler.quelle
Eine Reihe von Versionen
sed
unterstützen Unicode :Ich konnte keine Informationen zu BSD sed finden, was ich seltsam fand, aber ich denke, die Chancen stehen gut, dass es auch Unicode unterstützt. Leider gibt es keine Standardmethode, um zu bestimmen,
sed
welche Codierung verwendet werden soll.quelle
Das funktioniert bei mir:
Es ist ein Tropfen ausführlicher als ich möchte; Hier ist eine vollständige Erklärung:
-n
Deaktivieren Sie die VIM-Auslagerungsdatei-E
Ex verbesserter Modus-s
stiller Modus+'%s/\%u9991//g'
Führen Sie den Substitutionsbefehl aus+wq
speichern und schließenquelle
file1
an Ort und Stelle , ist das richtig?Funktioniert für mich mit GNU sed (Version 4.2.1):
(Als weiterer Ersatz für
sed
Sie könnte auch GNU verwendet werdenawk
; dies scheint jedoch nicht erforderlich zu sein.)quelle
Lassen Sie bei neueren BASH-Versionen einfach die Anführungszeichen um den sed-Ausdruck weg, und Sie können die mit Escape-Zeichenfolgen versehenen BASH-Zeichenfolgen verwenden. Leerzeichen innerhalb des sed-Ausdrucks oder Teile des sed-Ausdrucks, die von BASH als Platzhalter interpretiert werden könnten, können einzeln in Anführungszeichen gesetzt werden.
quelle