【发布时间】:2015-09-17 14:05:34
【问题描述】:
我想使用 sed 重命名一个文件。为简单起见,这就是我想要做的:
sh-4.3$ echo `date`
Thu 17 Sep 08:29:50 EAT 2015
sh-4.3$ echo `date` | sed 's/`date`/Today/'
Thu 17 Sep 08:29:58 EAT 2015
sh-4.3$
我希望它回应“今天”。有什么收获?
【问题讨论】:
我想使用 sed 重命名一个文件。为简单起见,这就是我想要做的:
sh-4.3$ echo `date`
Thu 17 Sep 08:29:50 EAT 2015
sh-4.3$ echo `date` | sed 's/`date`/Today/'
Thu 17 Sep 08:29:58 EAT 2015
sh-4.3$
我希望它回应“今天”。有什么收获?
【问题讨论】:
在单引号内,不计算反引号。改用双引号:
$ echo `date` | sed "s/`date`/Today/"
Today
由于各种原因,反引号被认为是过时的。对于所有 POSIX shell,请使用 $(...):
$ echo $(date) | sed "s/$(date)/Today/"
Today
虽然它可能与您的较大脚本无关,但对于这个简单的命令,不需要echo:
$ date | sed "s/$(date)/Today/"
Today
请注意,这是脆弱的。如果在执行一个和另一个 date 命令之间的秒数发生了变化,那么这个替换将会失败。
【讨论】:
echo $(date +%Y%m%d) | sed "s/$(date +%Y%m%d)/Today/"。工作正常,也感谢 $(...) 指针
echo `date`
不一样
echo 'date'
反引号导致执行包含在其中的表达式,单引号是纯字符串。
由于您的回显如此简单,echo date 也可以正常工作。
【讨论】:
我也预想更改分隔符,日期信息可能有一些元字符,具体取决于设置
date | sed "s~$( date )~Today~"
【讨论】: