Warum beinhaltet Grep noch.Und .. In meiner Liste von Dateien, obwohl es nicht mit dem Regex übereinstimmt, gebe ich es?
-
09-12-2019 - |
Frage
Was ich versuche, eine Sammlung aller UNTF16-Unicode-Diagramme zu erhalten.Ich habe alle PDF-Dateien von http://unicode.org/charts/pdf/ heruntergeladen und entschieden zu verwendenPerl, um alle Sonder- oder UTF32-Charts mit dem folgenden Skript zu entfernen: generasacodicetagpre.
Wenn ich das Skript ausführe, erhalte ich die folgende Ausgabe: generasacodicetagpre.
Die ersten 2 Linien sind immer noch generakodicetagcode und .
und ich denke, ich denke, weil ich versuche, den generationspflichten, generationspflichten aufzuschalten, sondern eine große Anzahl von Dateien entfernt, die ich nicht entfernen wollte.Ich bin nicht sicher, ob das Problem mit meinen Regexs, ..
, .
oder grep
liegt, aber es ist wevor mehr Dateien entfernt als es sollte.
Lösung
This line:
grep {!/^U[0-9,A-F]{4}\.pdf/ && !/utf16only.pl/}
Includes only files that match neither regex. That includes .
and ..
. To exclude those two, you'd have to extend that:
grep {!/^U[0-9,A-F]{4}\.pdf/ && !/utf16only.pl/ && !/^\.{1,2}$/}
Andere Tipps
It's your regex:
grep {!/^U[0-9,A-F]{4}\.pdf/ && !/utf16only.pl/} readdir($dir);
This says "match all files that do not match U[0-9,A-F]{4}.pdf
(note - do you really want that comma in there?), and also aren't utf16only.pl
.
Since .
and ..
do not match U[0-9A-F]{4}.pdf and don't match utf16only.pl
, they are also deleted.
Add a !/^\./
into your grep
to also exclude these files from the deletion list:
grep {!/^U[0-9A-F]{4}\.pdf/ && !/^\./ && !/utf16only.pl/} readdir($dir);
Note - I changed your [0-9,A-F]
to [0-9A-F]
, because I don't think your file names will have commas in them.