bummel Geschrieben 26. Juli 2013 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigvic Geschrieben 27. Juli 2013 Teilen Geschrieben 27. Juli 2013 Setze glob in einen Listencontext (array): grep { /datei/ } @{[</logs/*.log*>]}; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bummel Geschrieben 30. Juli 2013 Autor Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 31. Juli 2013 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bummel Geschrieben 31. Juli 2013 Autor Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 31. Juli 2013 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bummel Geschrieben 31. Juli 2013 Autor Teilen Geschrieben 31. Juli 2013 Möglicherweise Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.