Ich habe eine Datei namens "dictionary.txt", die eine Liste aller möglichen Wörter enthält, z. B .:
%Vor%Wie kann ich das suchen, nur Zeilen, die Buchstaben aus einer begrenzten Liste enthalten, zB wenn die Liste die Buchstaben "c", "a" und "t" enthält, wird eine Suche diese Wörter aufdecken:
%Vor%Wenn die Buchstaben "e", "a" und "t" durchsucht werden, werden nur diese Wörter aus "dictionary.txt" gefunden:
%Vor%Die einzige Lösung, die ich geschafft habe, ist diese:
Diese Lösung ist sehr langsam. Außerdem muss ich diesen Code mit anderen Sprachen verwenden, die Tausende von möglichen Zeichen haben, so dass diese Suchmethode besonders langsam ist.
Wie kann ich nur die Zeilen aus "dictionary.txt" drucken, die nur die gesuchten Buchstaben enthalten, und sonst nichts?
Erläuterung:
^
= marker bedeutet Anfang der Zeile
$
= Markierung bedeutet Ende der Zeile
[abc]
= Zeichenklasse ("irgendeines dieser Zeichen")
*
= Multiplikator für die Zeichenklasse (null oder mehr Wiederholungen)
Leider kann ich nichts sagen, sonst würde ich die Antwort von Amphetamachine hinzufügen . Wie auch immer, mit der aktualisierten Bedingung von Tausenden von Suchzeichen möchten Sie vielleicht Folgendes tun:
%Vor% wo patterns.txt
ist deine Regexp:
Im Folgenden finden Sie eine Beispielsitzung:
%Vor%Auf diese Weise werden Sie nicht durch die Shell eingeschränkt (Argumentliste zu lang). Sie können auch mehrere Muster in der Datei angeben:
%Vor% Versuchen Sie es mit awk
:
Ich fand, dass dies für mehr als etwa sieben Buchstaben mindestens eine Größenordnung schneller ist als grep. Ich weiß jedoch nicht, ob Sie mit Tausenden von Buchstaben auf dasselbe Problem stoßen werden, da ich nicht so viele getestet habe.
Sie können sogar mehrere Muster gleichzeitig suchen (dies ist schneller als jedes Muster einzeln zu durchsuchen, da die Wörterbuchdatei nur einmal gelesen wird). Jedes Muster verhält sich wie eine if-Anweisung:
%Vor%Verwenden Sie dies für den Buchstaben, den Sie finden müssen. Wenn Sie mehr als einen Buchstaben zusammen finden möchten, wiederholen Sie einfach den Befehl.
Grep sollte auch nicht für mehr als die einfachsten / elementaren Suchen verwendet werden, IMHO. Obwohl ich normalerweise zögere, irgendwelche POSIX-Dienstprogramme als veraltet zu bezeichnen, versuche ich grep zu vermeiden. Seine Syntax ist extrem inkonsistent.
Das Studium dieser Textdatei wird ebenfalls empfohlen. Ссылка