ubuntuusers.de

Regular Expressions in der Shell

Status: Gelöst | Ubuntu-Version: Ubuntu 7.10 (Gutsy Gibbon)
Antworten |

Jan-Nik

Avatar von Jan-Nik

Anmeldungsdatum:
22. Juli 2006

Beiträge: 427

Wohnort: Sulingen

Ich versuche die Versionsnummer von Mono per Shell heraus zu finden. Die Ausgabe von mono -V sieht bei mir so aus:

Mono JIT compiler version 1.2.6 (tarball)
Copyright (C) 2002-2007 Novell, Inc and Contributors. www.mono-project.com
	TLS:           __thread
	GC:            Included Boehm (with typed GC)
	SIGSEGV:       altstack
	Notifications: epoll
	Architecture:  x86
	Disabled:      none

Nun will ich hier die Versionsnummer extrahieren. Dazu hab ich folgenden regulären Ausdruck erstellt: [^\d]*([\d+\.]+\d+).*
Wie kann ich das jetzt auf die Ausgabe von Mono anwenden? In python würde ich das so machen:

re.compile("[^\d]*([\d+\.]+\d+).*").match("blabla 1.34.5 asdfasd").group(1)

Wie geht's in der Shell?

Pumbaa80 Team-Icon

Avatar von Pumbaa80

Anmeldungsdatum:
5. März 2007

Beiträge: 2130

Wohnort: Residenz des Rechts

Die Regex-Syntax ist in der Shell etwas anders.

mono -V | grep -Eo '([[:digit:]]+\.)+[[:digit:]]+'

e1bart0 Team-Icon

Avatar von e1bart0

Anmeldungsdatum:
12. Mai 2007

Beiträge: 927

Wohnort: München

So würde es ohne deinen RexEx gehen:

[foo@bar] [~] [17:32]
$ mono -V | head -n 1 | awk '{ print $5 }' 
1.2.4


Ansonsten könntest du es auch mit Perl machen, nur dort trifft dein RegEx auch auf andere Zeilen zu, und man darf deshalb nur die erste Zeile ausgeben:

[foo@bar] [~] [17:35]
$ mono -V | head -n 1 | perl -ne 'print $1 if /[^\d]*([\d+\.]+\d+).*/'
1.2.4

Jan-Nik

(Themenstarter)
Avatar von Jan-Nik

Anmeldungsdatum:
22. Juli 2006

Beiträge: 427

Wohnort: Sulingen

Danke für die schnellen Antworten! Ich werde wohl das erste nehmen, allerdings find ich die Möglichkeit mit perl am einfachsten, das merk ich mir. ☺

Antworten |