Entfernen Sie Zeilen mit nicht-englischen (Ascii -) Zeichen aus einer Datei
Ich habe eine Textdatei mit Zeichen aus verschiedenen Sprachen (Chinesisch, Latein etc)
Möchte ich entfernen Sie alle Zeilen, die diese nicht-Englisch-Zeichen. Ich möchte auch alle Englisch Zeichen (a-b), zahlen (0-9) und alle Satzzeichen.
Wie kann ich es tun mit unix-tools wie awk oder sed.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Perl unterstützt eine
[:ascii:]
Charakter-Klasse.Können Sie Awk, vorausgesetzt, Sie erzwingen Sie die Verwendung der C-locale:
Die Umgebungsvariable
LC_TYPE=C
(oderLC_ALL=C
) erzwingen Sie die Verwendung der C-locale für die Charakter-Klassifizierung. Es ändert die Bedeutung der Charakter-Klassen ([:alnum:]
,[:space:]
usw.) passend nur ASCII-Zeichen.Den
/[^[:alnum:][:space:][:punct:]]/
regex match Zeilen mit nicht-ASCII-Zeichen. Die!
vor dem regex-invertieren der Zustand. So werden nur Zeilen ohne irgendwelche nicht-ASCII - Zeichen übereinstimmen. Dann, als keine Aktion angegeben, wird die default-Aktion verwendet wird, für die übereinstimmende Zeilen (print
).EDIT: Das geht auch mit grep:
Können Sie
egrep -v
wieder nur Linien nicht passenden Muster, und verwenden Sie so etwas wie[^ a-zA-Z0-9.,;:-'"?!]
als Muster (mehr Satzzeichen als nötig).Hm, darüber nachzudenken, eine doppelte negation (
-v
und das invertierte Zeichenklasse) ist wahrscheinlich nicht so gut. Ein anderer Weg könnte sein^[ a-zA-Z0-9.,;:-'"?!]*$
.Können Sie auch einfach filter für ASCII:
echo é | grep [a-z]
findet, der é.Mit GNU grep, unterstützt perl-kompatible reguläre Ausdrücke, die Sie verwenden können: