Ich habe eine Textdatei mit Zeichen aus verschiedenen Sprachen wie (chinesisch, lateinisch usw.)
Ich möchte alle Zeilen entfernen, die diese nicht-englischen Zeichen enthalten. Ich möchte alle englischen Zeichen (a-b), Zahlen (0-9) und alle Interpunktionen einschließen.
Wie kann ich es mit Unix-Tools wie awk oder sed machen.
Sie können egrep -v
verwenden, um nur die Zeilen nicht zurückzugeben, die mit dem Muster übereinstimmen, und etwas wie [^ a-zA-Z0-9.,;:-'"?!]
als Muster verwenden (je nach Bedarf mehr Interpunktion).
Hm, wenn man darüber nachdenkt, ist eine doppelte Negation ( -v
und die umgekehrte Zeichenklasse) wahrscheinlich nicht so gut. Ein anderer Weg könnte ^[ a-zA-Z0-9.,;:-'"?!]*$
sein.
Sie können auch nur nach ASCII filtern:
%Vor%Sie können Awk verwenden, vorausgesetzt Sie erzwingen die Verwendung des Gebietsschemas C:
%Vor% Die Umgebungsvariable LC_TYPE=C
(oder LC_ALL=C
) erzwingt die Verwendung der C-Ländereinstellung für die Zeichenklassifizierung. Es ändert die Bedeutung der Zeichenklassen ( [:alnum:]
, [:space:]
usw.), um nur ASCII-Zeichen zu entsprechen.
Die /[^[:alnum:][:space:][:punct:]]/
regex-Übereinstimmung mit beliebigen Nicht-ASCII-Zeichen. Die !
vor der Regex invertieren die Bedingung. Daher stimmen nur Zeilen ohne Nicht-ASCII-Zeichen überein. Wenn keine Aktion ausgeführt wird, wird die Standardaktion für übereinstimmende Zeilen verwendet ( print
).
EDIT: Dies kann auch mit grep gemacht werden:
%Vor%