![“sed”用当前日期替换文本文件中的日期](https://linux22.com/image/159693/%E2%80%9Csed%E2%80%9D%E7%94%A8%E5%BD%93%E5%89%8D%E6%97%A5%E6%9C%9F%E6%9B%BF%E6%8D%A2%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E6%97%A5%E6%9C%9F.png)
我们想要调用一个参数文件(.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' 分隔符(不是 : 也不是 / 以日期格式出现)