• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

perl oneliner um die Distro rauszubekommen

framp

Moderator
Teammitglied
Der folgende Code funktioniert soweit ganz gut um die Linux Distro in Perl rauszubekommen. Hat jemand eine Idee wie man daraus einen oneliner machen kann? (Im Code habe ich zum Testen für die verschiedenen Arten eine Loop eingebaut. Die ist im oneliner natürlich nicht notwendig ;-) )

Code:
my $versionFile = `ls /etc/*[-_]*`;
my $v;

foreach $v (`ls /etc/*[-_]*`) {
        if ($v=~/\/etc\/([^-_]+)[-_](release|version)/) {
                print "Linux distro is $1\n";
        }
}
 
Hmm was suchst du denn genau? So ganz verstehe ich deine Frage noch nicht.
Meinst du sowas wie
Code:
print grep { /([^-_]+)[-_](release|version)/ } `ls /etc`;
?

}-Tux-{
 
OP
framp

framp

Moderator
Teammitglied
}-Tux-{ schrieb:
So ganz verstehe ich deine Frage noch nicht.

Eine schnelle Art die Linux Distro rauszubekommen ist nach /etc/[+_](release|version) zu greppen und den String vor dem [_-](version|release) auszugeben.

Dein Vorschlag sieht schon sehr gut aus :up: . Es fehlt noch das Extrahieren des Strings vor [-_] vom Filenamen und dessen Ausgabe ;-)

Edit: Wenn man noch
Code:
| sed s/[_-].*//
am Ende anhängt liefert es das gewünschte Ergebnis. Geht es auch ohne grep und sed - also plain perl? (Eher akademische Frage :roll: )
 
framp schrieb:
Geht es auch ohne grep und sed - also plain perl? (Eher akademische Frage :roll: )
Das grep hat nichts mit /bin/grep zu tun (schau dir mal perldoc -f grep an). Ansonsten versuch mal dies hier:
Code:
print grep { s/([^-_]+)[-_](release|verson)/$1/ } `ls /etc`;
Aber es gibt bestimmt noch elegantere Lösungen.. ist ja schliesslich perl :)


}-Tux-{
 
Oben