Ich habe darüber nachgedacht, ob diese Frage für SE geeignet ist oder nicht. Ich hoffe, Sie stimmen dem zu.
Vor einiger Zeit habe ich auf SE gefragt, wie man Text in Dateien findet und die Datei nur mit den passenden Zeilen belässt, die den gesuchten Text enthalten. Die Frage ist hier: Wie finde ich Text in Dateien und behalte nur die entsprechenden übereinstimmenden Zeilen über das Terminal unter OS X bei?
Während die Antwort perfekt funktionierte, frage ich mich jetzt, warum sed
es so schnell geht. In meinem Anwendungsfall hatte ich ziemlich viele Dateien, die insgesamt etwa 30 GB groß waren. Der sed
Befehl lief in ungefähr 12 Sekunden, was ich nie geglaubt hätte (Arbeiten mit einer normalen Festplatte). Innerhalb von 12 Sekunden las der Befehl 30 GB Text durch und schnitt jede Datei ab, um nur die entsprechenden Zeilen beizubehalten, nach denen ich gefiltert habe. Wie funktioniert das? (oder: was ist das für eine Zauberei?)
Der eigentliche Befehl war:
find . -type f -exec sed -i'' '/\B\/foobar\b/!d' {} \;
find . -type f -exec sed -i'' '/\B\/foobar\b/!d' {} \;
grep
so schnell? und (vielleicht) Funktioniert es grep
schneller mit langen oder kurzen Suchbegriffen?