2013-12-17 28 views
6

我對sed的一個問題。從這個輸入:桑達搜索2種模式,如果不存在的第一個模式,打印第二圖案

[/=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] 

我必須做的一個輸出:

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

我知道,該模式似乎很容易,但是,我甚至沒找到時間模式。因爲小時有時候是1或2位數字。

這是第三天,我一直在學習sed和尋找答案。我學過grep。如果使用grep非常簡單。但是這項任務迫使我使用sed。到目前爲止,這是我的sed命令:

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

結果只顯示分鐘和am/pm。輸入的每一行都有很多時間模式。但是我的結果顯示了每行的最後一次模式。如您所見:

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

我哪裏出錯了?

+0

+1非常好的第一個問題,包括樣本數據,預期輸出,電流輸出,並....喘息,通過O.P.企圖已經解決了自己的問題。嗯,你的頭銜似乎並不符合你的描述,但是它的假期是什麼。祝你好運,並繼續發佈! – shellter

回答

5

在這裏你去:

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

哇,非常感謝。這工作。我會了解這個命令。再次感謝你。你讓我開心。 :) – mprabuw

+0

哈哈,不客氣。我走了,由於帽子的狩獵票今天的,但我會給予好評的非常好的問題,明天;-) – janos

+0

假設總是有行(樣品的情況下)的拳頭「日」的值,並且從不與元素關聯的元素中的數字(類似於示例中的顏色)。非常有效的sed – NeronLeVelu

相關問題