2013-12-17 13 views
6

Ich habe eine Frage zu sed. Von diesem Eingang:Sed um 2 Muster zu suchen, wenn das erste Muster nicht existiert, das zweite Muster drucken

[/=TueGreen$58.30Orange5:36pmSat*=WedOrange$76.63Purple6:20pmTue] 
[/=Thu6:06pm$09.05Blue11:32amMon/=Thu1:38am$56.41Red4:25amThu] 
[/=Sun1:49pm$12.41Yellow2:51pmMon*=FriOrange$49.68Blue1:24pmTue] 
[/=Sat11:58am$82.24Orange3:44amMon*=Thu1:08am$33.49Red8:21amSat] 

muß ich eine Ausgabe machen:

$58.30 
6:06pm$09.05 
1:49pm$12.41 
11:58am$82.24 

Ich weiß, scheint das Muster so einfach, aber ich bin auch bei der Suche nach dem zeitlichen Verlauf fehlgeschlagen. Weil die Stunde manchmal 1 oder 2 Ziffern ist.

Dies ist der dritte Tag, ich habe gelernt, sed und auf der Suche nach der Antwort. Ich habe Grep gelernt. So einfach, wenn Sie Grep verwenden. Aber diese Aufgabe zwingt mich, sed zu benutzen. Bis jetzt ist das mein sed Befehl:

sed 's/.*\([0-9]*:[0-9]*\(am\|pm\)\).*/\1/' FILE 

Die Ergebnisse zeigen nur die Minuten und am/pm. Es gibt viele Zeitmuster in jeder Zeile der Eingabe. Aber mein Ergebnis zeigt das letzte Zeitmuster in jeder Zeile. Wie Sie unten sehen:

:20pm 
:25am 
:24pm 
:21am 

Wohin ging ich falsch?

+0

+1 für eine sehr gute erste Frage, einschließlich Beispieldaten, erwartete Leistung, Stromausgang, und .... Keuchen, ein Versuch von O. P. auf ihr eigenes Problem gelöst zu haben. Hmm, dein Titel scheint nicht zu deiner Beschreibung zu passen, aber was zum Teufel, es ist die Ferienzeit. Viel Glück und posten Sie weiter! – shellter

Antwort

5

Hier gehen Sie:

sed -e 's/[^$0-9]*\([0-9:]*[ap]m\)*\(\$[0-9.]*\).*/\1\2/' 
+0

Wow, vielen Dank. Das funktioniert. Ich werde über diesen Befehl erfahren. Nochmals vielen Dank. Du hast meinen Tag gerettet. :) – mprabuw

+0

Haha, gern geschehen. Ich habe heute keine Abstimmungen wegen Hutjagd, aber ich werde morgen deine ausgezeichnete Frage stellen ;-) – janos

+0

vorausgesetzt, es gibt immer einen Wert für den ersten "Tag" der Linie (der Fall in der Probe) und niemals a Ziffer in Element assoziieren mit dem Tag (die Farbe wie es in der Probe der Fall ist). Sehr effizient sed – NeronLeVelu