Skip to content

Vergreppt

Igitt :-O
sprintf(lala, "grep \"\\\"%s\\\"\" %s &> /dev/null", bla, blubb);

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Peter Geher

Och, da habe ich aber schon Schlimmeres und Längeres gesehen :-)

Andreas

Erinnert mich an eine Aufgabe die damals in einer LPIC Übung war.

Gebe sämtliche IP Adressen aller Dateien von /etc aus.
Da hat sogar unser "Linux Gott" (und der Herr verdient diese Bezeichnung wirklich!) gesagt, ne das ist mir zu dumm.

Irgendwann ne Stunde später kam einer und hatte eine gefühlt 5 Milliarden Zeichen lange Kommandozeile eingetippt mit der es funktioniert hat.


Nebenbei. Ich HASSE RegEx. Nuff said!

Josef

find /etc/ -type f -exec grep -H "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" {} \;

Tetja Rediske

Wozu find??

IchVermuteAufDemBaum

Weil das find mit -type f auf echte, reguläre Dateien begrenzt. Ein grep -r würde auch Symlinks nach sonstwohin erwischen, kommt nicht aus rekursiven Verzeichnisschleifen raus und falls es jemand geschafft hat, unter /etc/irgendwas auf ein blockdevice oder etwas ähnlich garstiges zu versymlinken (den gesamten Hauptspeicher vielleicht), dann wird's eklig. Echt eklig.

Tetja Re

Frei aus dem Gedächnis wäre dann aber ein:

find /etc/ -type f -o | xargs -0 grep -H "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"

Deutlich effektiver, mal abgesehen, dass die RegExp nicht ganz passt. Übrigesn IPv6 Matchen... das ist Horror...

IchVermuteAufDemBaum

Okay, erleuchte mich, warum soll es effektiver sein, eine Pipe und ein zusätzliches Executable (xargs) ins Spiel zu bringen?

Und was passt an der RegEx nicht? (okay, ist schon spät, vielleicht sehe ich es vor Müdigkeit nicht)

Tetja Rediske

Das Regex passt auch auf 999.999.999.999 z.B. und -exec erzeugt pro fund einen grep Prozess, während xargs nur je max Argumente ein grep erzeugt.

Andreas

Genau die selben Probleme hatten wir auch :D

Es durften aber halt ausschließlich mögliche IP Adressen sein. Aber ich bin eh keine RegEx leuchte.

Tetja Rediske

Ich benutze meist auch nur die genannte vereinfachte Form für IPv4, meistens reicht das aus.

Hier mal die RegEx für IPv6 ;) (Python Style)

(?=\b)((([0-9a-f]{1,4}:){1,1}(:[0-9a-f]{1,4}){1,6})|(([0-9a-f]{1,4}:){1,2}(:[0-9a-f]{1,4}){1,5})|(([0-9a-f]{1,4}:){1,3}(:[0-9a-f]{1,4}){1,4})|(([0-9a-f]{1,4}:) {1,4}(:[0-9a-f]{1,4}){1,3})|(([0-9a-f]{1,4}:){1,5}(:[0-9a-f]{1,4}){1,2})|(([0-9a-f]{1,4}:){1,6}(:[0-9a-f]{1,4}){1,1})|((([0-9a-f]{1,4}:){1,7}|:):)|(:(:[0-9a-f]{1,4}){1,7})|(((([0-9a- f]{1,4}:){6})(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}))|((([0-9a-f]{1,4}:){5}[0-9a-f]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)) {3}))|(([0-9a-f]{1,4}:){5}:[0-9a-f]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|(([0-9a-f]{1,4}:){1,1}(:[0-9a-f]{1,4}){1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\ d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|(([0-9a-f]{1,4}:){1,2}(:[0-9a-f]{1,4}){1,3}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|(([0-9a-f]{1,4}:){1,3}(:[0-9 a-f]{1,4}){1,2}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|(([0-9a-f]{1,4}:){1,4}(:[0-9a-f]{1,4}){1,1}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0 -1]?\d?\d)){3})|((([0-9a-f]{1,4}:){1,5}|:):(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|(:(:[0-9a-f]{1,4}){1,5}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0- 4]\d|[0-1]?\d?\d)){3}))(?=\b)

Andreas

Da kriegt man ja Kopfschmerzen von :D

Wie gut dass ich solche Konstrukte nie brauche, und die IPs immer auf einem Silbertablett gereicht bekomme. Oder eine Funktion hab die das für mich kann ;-)

Peter Geher

oO... Wenn man da einen Punkt vergisst, ist man am Arsch :-D

Andreas

Ich vergesse bei PHP ja schon aus Tradition ständig die Semikolon. :(

Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
BBCode-Formatierung erlaubt
Formular-Optionen