bummel Geschrieben 26. Juli 2013 Geschrieben 26. Juli 2013 Hallo, ich veruche gerade einen regex (druch einen grep) mit glob zu kombinieren. Es sollen dabei alle Logs, die ".log" enhalten und nicht "datei" im Namen haben, in ein Array gepusht werden. Kann mir jemand sagen wie ich grep und glob korrekt kombiniere? Andere Lösungen sind natürlich auch gerne gesehen. #!/usr/bin/perl use strict; use warnings; my @log_files_closed; my $log_files_closed; if(`find /sbin -name fuser` ne ""){ @log_files_closed = ([]); `/sbin/fuser /sbin/fuser 2>/dev/null`; if ($? == "256"){ while ( grep /[datei]/ glob("/logs/*.log*")){ if (`/sbin/fuser $_ 2>/dev/null` eq "") { push (@log_files_closed,$_); } } while (glob("/logs/*.err*")){ if (`/sbin/fuser $_ 2>/dev/null` eq "") { push (@log_files_closed,$_); } } } else{ print ("fuser nicht ausführbar"); } } else{ print ("fuser nicht gefunden"); } foreach (@log_files_closed){ print "$_\n"; } Gruß Bummel Zitieren
bigvic Geschrieben 27. Juli 2013 Geschrieben 27. Juli 2013 Setze glob in einen Listencontext (array): grep { /datei/ } @{[</logs/*.log*>]}; Zitieren
bummel Geschrieben 30. Juli 2013 Autor Geschrieben 30. Juli 2013 So geht es. =) Danke für deinen Hinweis @bigvic #!/usr/bin/perl use strict; use warnings; my @log_files_closed; my $log_files_closed; if(`find /sbin -name fuser` ne ""){ @log_files_closed = ([]); `/sbin/fuser /sbin/fuser 2>/dev/null`; if ($? == "256"){ foreach (grep { !/datei|data/ } @{[</dir/*.{log,err}]}){ if (`/sbin/fuser $_ 2>/dev/null` eq "") { push (@log_files_closed,$_); } } else{ print ("fuser nicht ausführbar"); } } else{ print ("fuser nicht gefunden"); } foreach (@log_files_closed){ print "$_\n"; } Zitieren
Dragon8 Geschrieben 31. Juli 2013 Geschrieben 31. Juli 2013 Hast du es denn vorher schonmal mit grep { !/datei|data/ } </dir/*.{log,err}> probiert? Da grep als zweiten Parameter immer eine Liste verlangt, müsste das eigentlich von sich aus funktionieren. Außerdem kannst du mit der Funktion -x testen ob eine Datei vorhanden und für dein Skript ausführbar ist. if( -x "/sbin/fuser") { [...] } else { print "Nicht vorhanden oder nicht ausführbar.\n"; } Außerdem erzeugst du bei der Initialisierung deiner Liste @log_files_closed eine Liste an deren 1. Stelle eine Referenz zu einer weiteren Liste steht, soweit ich ich das aber sehen kann, benötigst du das nicht. Es sollte also @log_files_closed = () reichen. Zitieren
bummel Geschrieben 31. Juli 2013 Autor Geschrieben 31. Juli 2013 Danke für die Hinweise. Es funktioniert alles genauso bzw. es ist mit dem "if (-x ....)" ist es besser gelöst. Unbewusst hast du auch ein Mysterium gelüftet. Zitieren
Dragon8 Geschrieben 31. Juli 2013 Geschrieben 31. Juli 2013 Unbewusst hast du auch ein Mysterium gelüftet. War das zufälligerweise, warum bei jeder Ausgabe an 1. Stelle "ARRAY([adresse])" stand? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.