2016-06-20 16 views
-1

Erstens, ich kenne Perl überhaupt nicht, und brauche eine relativ schnelle Antwort auf diese Frage. Ich habe das Ergebnis einen Befehl in einem Array gespeichert ausgeführt wird:Suche Array von Strings für bestimmte Wörter

my @result = `$command`; 

Was ich tun muß, ist das Array zu suchen, um zu sehen, ob jedes Element das Wort „Merge“ enthält oder das Wort „geändert“ (beide Groß- und Kleinschreibung).

Kann jemand bitte beraten?

+0

'perldoc -f grep' – toolic

+0

Dieses von grep in Perl beklebt ist: http: // Stackoverflow .com/questions/3848360/How-kann-ich-implementieren-Unix-grep-in-perl –

+0

Groß, downvoted entweder nicht zu wissen, Perl (was ich offen zugeben) oder unangemessen Google-Suche durchführen. Vielen Dank. – Wad

Antwort

2

Das Werkzeug für den Job hier ist grep - eine Funktion, mit der Sie einen Filter für eine Liste angeben können. Sie können es ähnlich wie Unix grep verwenden, es ermöglicht aber auch komplexere Tests (z. B. Ausführen von Code).

In Ihrem Fall:

my @matches = grep { /merge|changed/i } @result; 

if (@matches) { 
    print "One or more lines matched\n"; 
} 
+1

Sie wollen '/ i' auf dem Match-Operator für die Groß-/Kleinschreibung nicht beachten. –

+1

Guter Punkt. Geändert. – Sobrique

+0

'/ \ b (?: Merge | geändert) \ b/i' verhindert' versenkt' von der Übereinstimmung – ikegami

0

Sie diese mit einem regulären Ausdruck tun. In diesem Beispiel, wenn die Zeile Spiel 'verschmelzen' oder 'geändert' (unempfindlich natürlich) wird die Zeile gedruckt:

#!/usr/bin/perl 
use strict; 
use warnings; 

my @result = `command`; 

foreach my $line (@result){ 
    if ($line =~ /merge|changed/i){ 
     print $line; 
    } 
} 
+0

'/ \ b (?: Merge | geändert) \ b/i' verhindert' versenkt' von der Übereinstimmung – ikegami

+0

Schrägstrich in der Mitte -> sicher war es ein Fehler;) habe ich mit dem Befehl 'ps aux' und dem regex/bAsh | apACHe/i versucht und es funktioniert super –

Verwandte Themen