Veröffentlicht 26. Juli 201312 j 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
30. Juli 201312 j Autor 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"; }
31. Juli 201312 j 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.
31. Juli 201312 j Autor 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.
31. Juli 201312 j Unbewusst hast du auch ein Mysterium gelüftet. War das zufälligerweise, warum bei jeder Ausgabe an 1. Stelle "ARRAY([adresse])" stand?
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.