2011-05-14 103 views
0

我正在使用sed和剪切,這將需要時間輸入以各種方式,並以特定格式輸出它們的bash腳本。下面是一個例子行:Bash腳本:使用sed和剪切輸出特定格式

timeinhour=$(cut -d" " -f2<<<"$line" | sed 's/p/ /' | sed 's/a/ /' | sed 's/am/ /' | sed 's/pm/ /' | sed 's/AM/ /' | sed 's/PM/ /') 

正如你看到的,我只是去除可能以各種方式進行格式化,只留下數字的時間進入任何尾隨上午或下午。

所以我想這條線只是吐出一天的時間(timeinhour),即「10a」和「10am」的「1000AM」=「10」。

我遇到的問題是時間條目變化的長度。如果我告訴sed或剪切以刪除最後兩個字符,「1000」將正確輸出我需要的小時數:「10」,但在已經爲「10」的小時使用它顯然會導致空白輸出。

我一直在用一條線試驗這樣

sed 's/\(.*\)../\1/' 

如果任何人有任何建議,我將不勝感激。

例如,該輸入:

1p 
1032AM 
419pm 
1202a 

將產生:

1 
10 
4 
12 
+0

對此深感抱歉。顯示的特定行的輸入將是一段時間,可能以各種格式書寫。示例輸入:1p 1032AM 419pm 1202a。輸出將只是一天中的一小時。示例輸入=輸出組合:1p = 1 1032AM = 10 419pm = 4 1202a = 12 – user686566 2011-05-14 17:24:21

+0

@mu太短:這就是他的意思。 – Lucius 2011-05-14 17:45:51

回答

2
sed 's/[^0-9]//g;s/^[0-9]\{1,2\}$/&00/;s/^\(.*\)..$/\1/' 

步驟

1p -> 1 -> 100 -> 1 
10a -> 10 -> 1000 -> 10 
419pm -> 419 -> 419 -> 4 
1202a -> 1202 -> 1202 -> 12 
  • 刪除什麼不是數
  • 擴大1或2位數字(小時)到4位HHMM
  • 忽略最後兩個本地字符(分鐘)
+0

工程就像一個魅力!感謝您的解釋。 – user686566 2011-05-14 18:03:25

0

嘗試:

timeinhour=$(cut -d" " -f2<<<"$line" | sed 's/p/ /;s/a/ /;s/am/ /;s/pm/ /;s/AM/ /;s/PM/ /' | sed 's/\(.*\)../\1/' # Using your example.