パラメータファイル(.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'区切り文字を使用する(:または/日付形式ではありません)