Wie entferne ich alle Zeilen, die Nicht-ASCII-Tastaturzeichen enthalten?
Ich habe so oft reguläre Ausdruckscodes ausprobiert, aber keiner funktioniert so, wie er sollte. Ich habe sogar diesen Code ausprobiert, [^\x00-\x7F]+
aber er hat nicht alle Zeichen ausgewählt
die Idee, die mir in den Sinn kommt, ist, diesen Weg zu verwenden [^a-z0-9``~!@#$%^&*()-_=+[]{}\|;:'"<>,./?]
, aber immer noch nicht funktioniert, weil einige dieser Zeichen nicht abgewählt wurden wie\
/
|
{
}
[
]
$
#
^
(
)
Wenn eine Zeile Zeichen enthält, die nicht in der Liste unten aufgeführt sind, möchte ich sie entfernen oder als Lesezeichen speichern.
0123456789`~!@#$%^&*()-_=+[]{}\/|;:'"<>,.? abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
Einfaches Beispiel: Weitere Zeichen wie dieses finden Sie hier:https://en.wikipedia.org/wiki/Liste_der_Unicode-Zeichen
0123456789`~!@#$%^&*()-_=+[]{}\|;:'"<>,./? abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ ¤©ª«¬¯°±²³´µ¶·¸¹º»¼½¾¿÷ÆIJŒœƔƕƋƕ ƜƝƢƸƾDžNJNjǽǾǼɁɀȾɎʒəɼʰʲʱʴʳʵʶʷʸˁˀˇˆ˟ˠ ˩˧Ͱͱͳʹͼͻͺ͵ͿΏΔΘΞΛΣΠΦΧΨΩΪΫάέήίΰαβδε θηκλμξπςρφχψωϊϋϏώϑϐϓϒϔϕϖϠϟϞϝϜϡϢ ϤϣϧϫϬϮϯϰϱ₠₡₢₣₤₥₦₧₨₩₪₫€₭₮₯₰₱₲ ₳₴₵₶₷₸₹₺₻₼₽₾₿⅐⅑⅒⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜ ⅝⅞⅟℠℡™℣ℤ℥Ω℧ℨ℩KÅℬℭ℮ℯ⇀⇁ↀↁↂↃↄ ⇔⇕⇖⇗⇘⇙⇚⇛⇜⇝⇞⇟⇠⇡⇢⇣⇤⇥⇦⇧⇨⅀⅁⅂⅃⅄ⅅ ⅆⅇⅈⅉ⅊⅋⅌⅍ⅎ⅏ⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽ
Erwartetes Ergebnis:
0123456789`~!@#$%^&*()-_=+[]{}\|;:'"<>,./? abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
Antwort1
[^\x00-\x7F]
funktioniert gut, aber wenn Sie eine lange Zeichenklasse wie verwenden möchten, [^a-z0-9``~!@#$%^&*()-_=+[]{}\|;:'"<>,./?]
müssen Sie Zeichen mit einer besonderen Bedeutung maskieren (z. B. -[]\
und Zeilenumbrüche hinzufügen \r
, \n
).
Ihr regulärer Ausdruck wird:
[^a-z0-9``~!@#$%^&*()\-_=+\[\]{}\\|;:'"<>,./?\r\n]
# ^ ^ ^ ^ ^^^^
- Ctrl+H
- Suchen nach: Funktioniert
[^a-z0-9``~!@#$%^&*()\-_=+\[\]{}\\|;:'"<>,./?\r\n]+$
aber auch hier einwandfrei und ist besser lesbar[^\x00-\x7F]
- Ersetzen mit:
LEAVE EMPTY
- check Umwickeln
- check Regulärer Ausdruck
- Replace all
Ergebnis für gegebenes Beispiel:
0123456789`~!@#$%^&*()-_=+[]{}\|;:'"<>,./?
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Antwort2
Wenn Sie der Lösung gegenüber agnostisch sind und nicht auf Notepad++ festgelegt sind, können Sie Bash für Win 10 installieren, wie ich hier gezeigt habehttps://superuser.com/a/1252271/715210(Entschuldigung, ich komme immer mit Linux-Workarounds auf Ihre Fragen zurück ;))
Ich hätte eine Lösung, bei der leider auch das Apostroph verloren geht'
- Öffnen Sie Bash für Windows über das Startmenü
- Gehen Sie zu dem Ordner, in dem sich Ihre Datei befindet
cd /mnt/c/path/folder
(das Laufwerk C: befindet sich auf /mnt/c) Wenn Ihre Datei den Namenfoo.txt Sie könnten eine Datei generierenbar.txtmit diesem Befehl:
cat foo.txt | tr -cd '[:alnum:]\n\r~!@#$%^&*()-_=+{}\|;:<>,./?"`' | sed '/^$/d' > bar.txt
Erklärung der Teile:
cat foo.txt
gibt die Textdatei aus und mit der Pipe |
wird die Ausgabe an den Befehl umgeleitet tr -cd
, der alle Zeichen entfernt, die nicht in der Liste enthalten sind. Nach dem Zwischenschritt '...'. Followed by a pipe to
sed to remove the empty lines. Last but not least with
> bar.txt leiten wir die Ausgabe in die Datei umbar.txt
Dank an:
- https://stackoverflow.com/a/20007549/7311363für den :alnum:-Tipp
- https://unix.stackexchange.com/a/48568/223965zur Erklärung des Apostrophs
Antwort3
In Notepad++ ist dies einfach:
SpeisekarteSuchen>Markieren...
Suchen nach:
[^\x00-\x7F]
☑ Zeile markieren
(•) Regulärer AusdruckDrücken SieFinde alle
SpeisekarteSuchen>Lesezeichen>Lesezeichenzeilen entfernen