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
bigvic Geschrieben 27. Juli 2013 Geschrieben 27. Juli 2013 Setze glob in einen Listencontext (array): grep { /datei/ } @{[</logs/*.log*>]};
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"; }
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.
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.
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?
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden