「sed」はテキストファイルの日付を現在の日付に置き換えます。

「sed」はテキストファイルの日付を現在の日付に置き換えます。

パラメータファイル(.txt)を呼び出そうとし、ジョブがトリガされると、アプリケーションは動的値を読み取ります。値の1つは次のとおりです。

abc.txt
------------------
Code:
line1
line2
line3
$$EDWS_DATE_INSERT=08-27-2019
line4
$$EDWS_PREV_DATE_INSERT=08-26-2019

この日付を毎日現在の日付に更新する単純なコマンドを作成しようとしていますが、日付値を変更しません。
パスワード:

sed -i 's/$$EDWS_DATE_INSERT =.*/$$EDWS_DATE_INSERT="$(date `+%y%m%d`)"/' abc.txt

現在の結果:

$$EDWS_DATE_INSERT="$(date `+%y%m%d`)"

誰でも助けることができますか?

答え1

コマンドに追加のスペースがあります

sed -i 's/$$EDWS_DATE_INSERT<extra_space>=.*/$$EDWS_DATE_INSERT="$(date `+%y%m%d`)"/' abc.txt

私の考えであなたが探しているものは次のとおりです。

sed -i "s/\$\$EDWS_DATE_INSERT=.*/\$\$EDWS_DATE_INSERT=$(date '+%y%m%d')/" abc.txt

より良い点は次のとおりです。

sed -E -i "s/(\\\$\\\$EDWS_DATE_INSERT=).*/\1$(date '+%y%m%d')/" abc.txt

出力:

line1
line2
line3
$$EDWS_DATE_INSERT=190827
line4
$$EDWS_PREV_DATE_INSERT=08-26-2019

sed一重引用符を二重引用符に置き換えます。バックティックを一重引用符で置き換えます。

編集:私の前のコマンドは間違った。アップデートには固定コマンドを使用します。

答え2

私は次のことを達成するために小さなスクリプトを使用します。

#!/bin/bash
DATE_NOW=$(date +"%Y/%m/%d %T")
echo "its: $DATE_NOW"
sed -i 's|DEV-BuildTime.*|DEV-BuildTime '"$DATE_NOW"'|' path/to/file

メモ:

  • 正規表現の解釈を心配しないでください。
  • | 's'区切り文字を使用する(:または/日付形式ではありません)

関連情報