Sed

如何使用sed替換引號中的字元串

  • July 9, 2021

我想在下面的程式碼中使用 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(就地編輯)實現可移植性?)。

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