我有一個 bash 腳本,它通過i2cdump
#!/usr/bin/env bash
TIME=$(i2cdump -r 0-6 -y 0 0x68 b)
TIME=${TIME:76:20}
echo $TIME
OUTPUT: 16 44 17 03 15 11 22
輸出形式為SEC MIN HOUR DAY DATE MONTH YEAR
我現在想根據此輸出設定我的系統時間,使用timedatectl它需要轉換輸出
# timedatectl set-time 'YEAR-MONTH-DATE HOUR:MIN:SEC'
如何將一串形式轉換SEC MIN HOUR DAY DATE MONTH YEAR為'YEAR-MONTH-DATE HOUR:MIN:SEC'?
我曾嘗試用冒號替換空格,但不知道如何正確設定日期格式以使其位于時間之前。
uj5u.com熱心網友回復:
可能只是將舊格式傳遞給讀取然后從變數中組裝是最干凈的方法:
TIME="16 44 17 03 15 11 22"
read SEC MIN HOUR DAY DATE MONTH YEAR <<< "$TIME"
NEWTIME="20$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC"
echo "$NEWTIME"
或更老式的管道進入 while 回圈:
echo $TIME | while read SEC MIN HOUR DAY DATE MONTH YEAR; do
NEWTIME="20$YEAR-$MONTH-$DATE $HOUR:$MIN:$SEC"
echo "$NEWTIME"
done
輸出:
2022-11-15 17:44:16
當然sed和awk也可以,盡管可讀性稍差:
echo "16 44 17 03 15 11 22" | sed -e's/\([0-9][0-9]\) \([0-9][0-9]\) \([0-9][0-9]\) \([0-9][0-9]\) \([0-9][0-9]\) \([0-9][0-9]\) \([0-9][0-9]\)/20\7-\6-\5 \3:\2:\1/'
2022-11-15 17:44:16
echo "16 44 17 03 15 11 22" | awk '{print 20$7"-"$6"-"$5" "$3":"$2":"$1}'
2022-11-15 17:44:16
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/533944.html
標籤:Linux狂欢
