“sed”用当前日期替换文本文件中的日期

“sed”用当前日期替换文本文件中的日期

我们想要调用一个参数文件(.txt),我的应用程序在触发作业时读取动态值,其中一个值如下:

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

笔记:

  • 不要在日期中获取 (UTC +N) 担心正则表达式解释
  • 使用| 's' 分隔符(不是 : 也不是 / 以日期格式出现)

相关内容