Linux

使用 bash 腳本將目前日期寫入 .cfg/文本文件

  • June 19, 2020

我正在嘗試將目前日期作為月/日(即 6/18)列印到 .cfg 文件中(使用 sed,因為我需要更改特定的行)。但是,在執行 bash 時,輸出中的日期是正確的,但是在檢查文件時,它列印的是命令而不是日期。有什麼建議麼?

sed -i -- 's/^example=.*/example="$(date)"/g' /path/to/config.cfg

此外,日期只是列印完整日期(2020 年 6 月 18 日星期四 19:34:14 EDT),我只需要月/日。

先感謝您!!!

shell 從不擴展單引號字元串中的任何內容。

您必須為sed表達式使用雙引號字元串:

sed -i "s,^\(example=\).*,\1$(date +%m/%d)," /path/to/config.cfg

或者,使用兩個單引號字元串,並在它們之間用雙引號替換命令:

sed -i 's,^\(example=\).*,\1'"$(date +%m/%d)"',' /path/to/config.cfg

或者,讓date輸出sed表達式:

sed -i "$(date +'s,^\(example=\).*,\1%m/%d,')" /path/to/config.cfg

(但這看起來有點尷尬)。

example=通過文本的反向引用,我將表達式縮短了一點。我將,其用作s///命令 in的分隔符,sed因為我們正在處理包含字元的替換部分中的/字元串(替代方法是%m\\/%d用作格式字元串date以生成轉義/字元)。

請注意,在上述命令的第一個變體中,命令替換周圍不需要雙引號,因為sed引用了整個表達式。此外,不需要命令/g末尾的 ,s///因為您不能期望模式匹配多次,因為它已錨定在行首。我也刪除了--你使用的那個。一些sed實現幾乎肯定會使用該字元串作為備份後綴,即作為選項的選項參數-i(例如sed在 macOS 上)。

date +%m/%d用來生成想要的日期格式。這將為06/19今天的日期生成。您是否不想在當天使用零填充數字,請使用%e%d請參閱man strftime)。似乎沒有標準格式來獲取不填零的月份,但如果您使用 GNU date,則可以使用非標準%-m格式(即date +%-m/%e,請參閱 參考資料man date)。

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