我有一个文件,我想用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$
我希望它回应"今天"。什么是捕获?
答案 0 :(得分:1)
在单引号内,不会评估反引号。改为使用双引号:
$ echo `date` | sed "s/`date`/Today/"
Today
出于各种原因,反叛被认为是过时的。对于所有POSIX shell,请使用$(...)
:
$ echo $(date) | sed "s/$(date)/Today/"
Today
虽然它可能与较大的脚本无关,但对于这个简单的命令,不需要echo
:
$ date | sed "s/$(date)/Today/"
Today
请注意,这很脆弱。如果在执行一个date
命令和执行一个<div id="intro">
<h1 class="some class">
<p id="some_id">
Some text 1
</p>
<p>
Some text 2
</p>
</div>
命令之间发生秒数,则此替换将失败。
答案 1 :(得分:0)
echo `date`
与
不同echo 'date'
反引号会导致执行包含在其中的表达式,单引号是一个纯字符串。
由于您的回声如此简单,echo date
也可以正常工作。
答案 2 :(得分:0)
我预先设定也要更改分隔符,日期信息可能有一些元字符取决于设置
date | sed "s~$( date )~Today~"