2016-09-28 77 views
1

我是新來的Linux一般,我想用sed命令來改變我的日誌文件的格式:格式時間戳輸出使用的sed

當前格式:

2016-09-27file.txt::2016-09-27 18:00:00 

預期格式:

2016-09-27file.txt::2016/09/27-18:00:00 

我該如何編寫sed命令?

感謝, ž

+0

即用'一個嚴重弄亂日誌文件格式:單曲兩者分離字段和字段內和與指定了兩次的時間使用。你能解決它的來源嗎? –

回答

1

下面顯示瞭如何做到這一點上一行:

echo "2016-09-27file.txt::2016-09-27 18:00:00" | sed 's/\([0-9]*\)-\([0-9]*\)-\([0-9]*\) /\1\/\2\/\3-/'

regexp一部分要更換的日期部分,這也是分裂相匹配將其轉換爲子表達式,以使這些零件在替換零件上可供使用。

+0

這工作,謝謝。 – Calvin

0
sed -i 's/-///g' "$filename" 

sed -i 's/ /-/g' "$filename" 

試試這個。

+0

需要像's | - |/| g'那樣使用不同的分隔符,或者像s/-/\ // g'那樣轉義它。好的思路替代解決方案,但是,這會將開始日期更改爲string as以及這不是什麼OP要求... – Sundeep

+0

是的你是對的,我忘了第一次約會。我的錯。 – AFR

0

這裏有一個perl版本

$ echo '2016-09-27file.txt::2016-09-27 18:00:00' | perl -pe 's#::\K(\d{4})-(\d{2})-(\d{2}) #$1/$2/$3-#' 
2016-09-27file.txt::2016/09/27-18:00:00 
  • ::\K積極的回顧後,檢查是否::存在,不會被替換
  • (\d{4})-(\d{2})-(\d{2})拍攝日期
  • $1/$2/$3-重新格式化,$1對應於捕捉組(\d{4})等等
  • #是定界符使用比通常/這使得不必要逃避替換字符串/