2017-08-09 142 views
2

我試圖使用爲了得到以下從看起來像這樣09/Aug/2017:14:15:11sed的正則表達式捕獲組輸出整個輸入

字符串輸出>09 Aug 2017 14:15:11 sed的當我用下面的代碼

sed 's/^\(\d+\)\/\(\w+\)\/\(\d+\)\:\(.*\)$/\1 /p' <(echo "09/Aug/2017:14:15:11") 

我得到整個輸入的字符串作爲輸出: 09/Aug/2017:14:15:11

林以執行date -d命令這樣做結果自date -d 09/Aug/2017:14:15:11 +%s給我這個錯誤:date: invalid date ‘09/Aug/2017:14:15:11’。 如果您有其他建議而不是使用sed不要猶豫提出建議。

謝謝!

回答

2

隨着sed

$ echo "09/Aug/2017:14:15:11" | sed -e 's#/# #g' -e 's/:/ /' 
09 Aug 2017 14:15:11 

我們用這裏有兩個search and replace命令,一個接一個的運行。第一個替換全部(注意全局標誌,g)與空格(/),第二個替換隻是第一個冒號(:)(注意缺少g標誌)。兩者都是搜索和替換命令(s),但第一個使用#作爲分隔符而不是標準/,所以我們不必逃避正在搜索的斜線。

+0

哇,太感謝你了,這確實有幫助!你有沒有可能解釋一下這些表達式'-e's#/##g'-e's /:/ /''究竟是如何工作的? @randomir *編輯*只是刷新和注意到你的編輯,謝謝,太棒了! –

+0

我已經擴展了一些解釋。現在更清楚了嗎? – randomir

+0

最肯定,簡短而直截了當,謝謝! :) –

1

我想下面的命令更好:

date "+%d %h %Y %H:%M:%S" 
+0

OP想要轉換現有日期字符串,*不*要以特定格式打印當前日期。 – randomir