Sed

使用 sed 命令替換字元串中前 2 次出現的“:”

  • June 12, 2021

我正在嘗試YYYY:MM:DD HH:MM:SS使用 date (bash) 命令比較格式中的 2 個日期。我的問題是 date 命令只使用日期格式(據我所知)YYYY-MM-DD HH:MM:SS。我試圖將 sed 與正則表達式一起使用來替換前 2 次出現的:with-但我無法讓它工作。我才2018年。

date1="2018:01:16 12:25:35"
echo $date1 | sed 's/\([0-9]*\).*/\1/'

我會接受任何可能的建議,謝謝。

[按要求回答問題-儘管這可能不是解決實際日期比較問題的最佳方法]

一種方法是使用循環一次替換一個冒號,當結果包含兩個連字元時退出循環:

echo '2018:01:16 12:25:35' | sed ':a; /^[^-]*-[^-]*-/ b; s/:/-/; ta'
2018-01-16 12:25:35

或者,如果你有 GNU sed,你可以用連字元替換所有的冒號,然後從第三個連字元開始再次用冒號替換:

echo '2018:01:16 12:25:35' | sed 'y/:/-/; s/-/:/3g'
2018-01-16 12:25:35

只需做兩次簡單的替換:

sed 's/:/-/;s/:/-/'

引用自:https://unix.stackexchange.com/questions/417892