Linuxにはテキストファイルがあり、awkを使用して日付部分を変更して現在の日付を入力したいと思います。もちろん、私はこれを書いて動作しますが、手動で日付を指定する必要があります。私が望むのは、自動的に今日の日付を変更することです。
パスワード:
awk '{gsub(/ISODate\(\"[0-9][0-9][0-9][0-9][-][0-9][0-9][-][0-9][0-9]/,"ISODate(\"2022-10-02");print}' rasoul-02.json
答え1
今日の日付をISO形式にインポートする方法はいくつかあります。
- 外部コマンドを使用します。
date +'%F'
- シェルコマンドを使用してください。
printf '%(%F)T\n' -1
- いくつかのawkバージョンでは:
strftime("%F")
最も汎用性のある(ポータブル)ソリューションは、次のものを使用することですdate
。
awk '{gsub(/ISODate\([0-9]{4}([-][0-9]{2}){2}\)/,"ISODate("isodate")")}1
' isodate=$(date +'%F') rasoul-02.json
シェルの内部日付形式を使用する可能な解決策は次のとおりです。
$ printf -v isodate '%(%F)T' '-1';
$ awk '{gsub(/ISODate[(]["][0-9]{4}([-][0-9]{2}){2}["][)]/,"ISODate(===\""isodate"\")")}1
' isodate=$isodate rasoul-02.json
そしてstrftime
GNU awk(および他のいくつかの)の機能を使用してください。
awk '{ gsub( /ISODate[(]["][0-9]{4}([-][0-9]{2}){2}["][)]/ , "ISODate(\"" strftime("%F") "\")" )}1
' rasoul-02.json
答え2
awk
日付を変数として渡すことができます。
awk -v date="$(date +%F)" '{gsub(/ISODate\("[0-9][0-9][0-9][0-9][-][0-9][0-9][-][0-9][0-9]/,"ISODate(\""date"\"");print}'
GNU awk()を使用できる場合は、正規表現をgawk
大幅に単純化することもできます。
gawk -v date="$(date +%F)" '{
gsub(/ISODate\("[0-9]{4}-[0-9]{2}-[0-9]{2}/,"ISODate(\""date);
print
}' rasoul-02.json
しかしこれはすべて非常に悪い考えである。 JSONファイルで作業している場合は、jq
より安全で簡単な方法でこれを行うことができる同様の専用JSONパーサーがあります。より良い回答を提供できるように、実際のファイルを公開することをお勧めします。