【问题标题】:Replace date in a parameter file with system date将参数文件中的日期替换为系统日期
【发布时间】:2017-06-03 00:02:33
【问题描述】:

在我的 Unix AIX 中,我需要使用将从 PowerCenter 运行会话后的 shell 脚本将参数文件中的日期替换为系统日期。

我可以使用 SED 替换字符串变量,但使用日期会遇到问题。

我尝试使用逗号而不是斜杠作为分隔符。测试文件的内容如下:

$$TESTFIELD=12/29/2016 14:57:51

我认为应该起作用的 sed 命令是:

sed -e "s,^\($$TESTFIELD=\).*,\1'date +"%D %T"'," testfile.txt > tmp.$$

之后我会将tmp.$$ 移动到testfile.txt,但结果引发了以下错误:

sed: 0602-404 Function s,^\(14680298TESTFIELD=\).*,\1'date +%D cannot be parsed.

【问题讨论】:

  • 请注意,您使用的是双引号,因此sed -e "s..."$$TESTFIELD 扩展为它的值。
  • 您可能还想看看How to change date format in sed?,了解如何从sed 中执行外部命令。基本上,您需要使用-e 标志。
  • 也许:Now=$(date +"%D %T"); sed "s,=.*$,=$Now," testfile.txt >>tmp.$$

标签: shell sed aix


【解决方案1】:

您需要在sed 命令中使用单引号或转义$。否则外壳会扩展$TESTFIELD。在这种情况下,我推荐第一个:

sed -e 's,^\($$TESTFIELD=\).*,\1'\''date +"%D %T"'\'','

你的问题很不清楚。如果要将文件中的日期时间替换为当前日期时间,请使用:

sed -e 's,^\($$TESTFIELD=\).*,\1'"$(date +"%D %T")"','

【讨论】:

  • 该方法不插入当前日期/时间,但实际上插入 dat+"%D %T": $$TESTFIELD='date +"%D %T"'
  • 阅读您的问题,看起来您想要那个
  • 抱歉,我需要结果为 01/18/2017 12:34:30 或任何当前日期时间。
  • 现在的结果是:$$TESTFIELD='01/18/17 12:36:50' 我尝试删除几个引号以删除结果中的引号。如果这里不容易的话,我可以稍后在 PowerCenter 中执行此操作。
  • 完美。非常感谢。
【解决方案2】:
sed -e 's,^\($$TESTFIELD=\).*,\1'"$(date +"%D %T")"','

这非常有效。结果: $$TESTFIELD=01/18/17 13:14:59

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    相关资源
    最近更新 更多