Sed
如何使用sed替換引號中的字元串
我想在下面的程式碼中使用 sed 來替換目前時間
time0=$(date '+%Y-%m-%d') time1=$(date '+%H:%M:%S') time=$(echo ""$time0"T"$time1"Z")
在第一行替換 $time
{ "X-Apple-I-Client-Time" = "2020-07-08T12:55:08Z"; "X-Apple-I-Locale" = "en_US"; "X-Apple-I-MD" = "AAAABQAAABDBy+H0j9QAnYGIzrmKeh9DAAAAAw=="; "X-Apple-I-MD-M" = "6Q3cWbCm2lI9rrTIyrAsku5zxqO/ZAv9HsW5kHo2thiPqFINp0/OsOz++KS/2vc0ImbI2iMVUbYCZjnS"; "X-Apple-I-MD-RINFO" = 50660608; "X-Apple-I-TimeZone" = "GMT+7"; }
全部
now=$(date -u +'%Y-%m-%dT%H:%M:%SZ') sed 's/\("X-Apple-I-Client-Time" = \).*/\1"'"$now"'";/' file
這將計算目前的 UTC 時間戳並將其保存在 shell 變數
now
中。file
然後它會在呼叫的文件中找到包含確切字元串的任何行,並將其後的"X-Apple-I-Client-Time" =
所有內容替換為引號中的時間戳和結尾的;
.結果被寫入標準輸出。如果您想直接在原始文件中進行更改,您可能需要使用
now=$(date -u +'%Y-%m-%dT%H:%M:%SZ') cp file file.tmp && sed 's/\("X-Apple-I-Client-Time" = \).*/\1"'"$now"'";/' file.tmp >file && rm -f file.tmp
(這會破壞
file.tmp
)如果您的系統
sed
實現具有-i
“就地”編輯,那麼您顯然可以使用它。並不是說sed -i
在 FreeBSD 和 macOS 上需要一個空參數來-i
編輯沒有備份文件的選項(請參閱如何使用 sed -i(就地編輯)實現可移植性?)。