2016-10-19 3 views
-1

In folgenden String möchte ich die Ziffern zwischen - und RaumWie verwende ich sed, um eine Zeichenkette zwischen einem bestimmten Zeichen und einem Leerzeichen zu erhalten?

RXOTG-196 HK6500A 0 

Das Ergebnis ich will, ist 196
Wie kann ich es mit sed tun?
Die Anzahl der Ziffern ist nicht unbedingt 3, manchmal ist es 2 oder 1 Ziffer.

+0

Wie, wenn ich den obigen Eingang 'RXOTG-196 HK6500A 0' ist nur eine Zeile unter Multiline-Eingang, möchte ich nur die 169 und nicht andere zusätzliche Zeilen – solarisan

Antwort

0

Dieses Muster funktioniert in meinem sed:

sed -e 's_^[^-]*-\([^ ]*\).*$_\1_' 
+0

Funny, $' Anker nach '. *' =) –

+0

hinzufügen Dies ist kein Code Golf! True, das $ ist redundant. –

+0

Weniger ist das Beste: D –

0
$ echo 'RXOTG-196 HK6500A 0' | sed -E 's/.*[A-Z]-([0-9]+).*/\1/' 
196 
1

Dies könnte für Sie arbeiten (GNU sed):

sed -r 's/-([0-9]+) /\n\1\n/;/^[0-9]+\n/P;D' file 

Surround die erforderliche Zeichenfolge durch Zeilenumbrüche und nur Druckzeilen, die passen Zahlen gefolgt von einem Zeilenumbruch. Dadurch werden alle Übereinstimmungen in separaten Zeilen gedruckt.

Verwandte Themen