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";
}

みんなありがとう

ベストアンサー1

now=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
sed 's/\("X-Apple-I-Client-Time" = \).*/\1"'"$now"'";/' file

これにより、現在のUTCタイムスタンプが計算され、シェル変数に保存されます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ある場合はそれを使用できます。バックアップファイルなしで編集するためにFreeBSDとmacOSで空の引数が必要では-iありません(参照:sed -i-ised -i(所定の位置で編集)を使用して移植性を達成するには?)。

おすすめ記事