Permalänk
Medlem

Någon duktig på sed?

Har ett problem där jag behöver plocka ut vilken version av distributionen som är installerad på en server med ett kommando, just nu på RHEL 3,4,5 och Ubuntu.
Det går att finna versions nummer i /etc/issue, så jag går på det.

Exempel på strängar:
1. "Red Hat Enterprise Linux ES release 3 (Taroon Update 9)"
2. "Ubuntu 10.04.1 LTS \n \l"
3. "Red Hat Enterprise Linux Server release 5.5 (Tikanga)"

Min nuvarande lösning: cat /etc/issue | head -n1 | sed 's/[^0-9.]//g'

Men den fungerar inte på första strängen då output blir "39", och jag vill bara ha "3".

Tack på förhand!

Permalänk
Medlem

Kanske inte den snyggaste lösningen men den fungerar:
cat /etc/issue | head -n1 | sed 's/...$//; s/[^0-9.]//g'

/Peter

Permalänk
Medlem

cat /etc/issue | head -n1 | sed 's/(.*)//; s/[^0-9.]//g'

Funkar också...

Permalänk
Medlem

Om du verkligen bara vill ha första siffran så använd något i stil med

sed 's/\([^0-9]*\)\([0-9]\).*/\2/'

Vill du ha fler siffror och eventuellt point-versioner och builds så använd något i stil med

sed 's/\([^0-9]*\)\([0-9a-z.-]*\).*/\2/'

som plockar ut den första strängen som ser ut som ett versionsnummer (börjar med en siffra och innehåller siffror, gemener, komma och/eller bindesstreck).

Permalänk
Medlem

Tack för alla svar! Märker att jag behöver förbättra mina sed kunskaper markant.