奇妙な時間検索

奇妙な時間検索

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

そしてstrftimeGNU 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パーサーがあります。より良い回答を提供できるように、実際のファイルを公開することをお勧めします。

関連情報