Replace 使用sed将一行(可能会更改)替换为另一行

Replace 使用sed将一行(可能会更改)替换为另一行,replace,sed,grep,Replace,Sed,Grep,我想运行一个脚本,更改HTML代码中的一行,指示页面上次更新的时间。例如,我有一条线 此页面上次更新时间为2013年4月29日UTC 00:34 我现在正在更新它,所以我想用 此页面上次更新时间为2013年5月15日15:50 UTC 这是我的源代码中唯一一行带有标记的代码,希望这能有所帮助。我已经有一些代码可以生成带有当前日期和时间的新字符串,但我无法找到替换旧字符串的方法(这会发生变化,所以我不知道它到底是什么) 我尝试在前一行中输入注释,删除包含(使用grep)的整行,然后在注释后面输入一

我想运行一个脚本,更改HTML代码中的一行,指示页面上次更新的时间。例如,我有一条线

此页面上次更新时间为2013年4月29日UTC 00:34

我现在正在更新它,所以我想用

此页面上次更新时间为2013年5月15日15:50 UTC

这是我的源代码中唯一一行带有
标记的代码,希望这能有所帮助。我已经有一些代码可以生成带有当前日期和时间的新字符串,但我无法找到替换旧字符串的方法(这会发生变化,所以我不知道它到底是什么)

我尝试在前一行中输入注释
,删除包含
(使用
grep
)的整行,然后在注释后面输入一行新字符串,但失败了。例如,如果我只想在注释后插入字符串
text
,并使用

sed-i的//text/'file.html


我得到
无效的命令代码j
。我想这可能是因为字符串中有一些特殊字符,如
,但如果我想在上面的日期字符串中输入,我会有更多字符,如
/
。感谢您提供有关如何修复此问题的任何想法。

使用命令行时,请尝试转义以下特殊字符:
==>
\

你不需要你的黑客。您可以在sed命令中使用正则表达式和“/”之外的另一个分隔符:

sed -i.bak 's@<d>This page was last updated on.*</d>@<d>This page was last updated on 12.05.2013 at 00:38 UTC</d>@' whatever.html
sed-i.bak's@This页面上次更新日期。*@此页面上次更新日期为2013年5月12日UTC时间00:38@'whatever.html
或者,如果更新包含在名为$replacement的变量中:

sed -i.bak "s@<d>This page was last updated on.*</d>@$replacement@" whatever.html
sed-i.bak”s@This页面上次更新日期为。*@$replacement@“whatever.html

这将仅更改包含
的行上的文本:


sed-i.bak”//s/on.*在[^没有骰子。同样的错误,只用于
,或
。信不信由你,我认为问题在于你正在使用
csh
或其他shell,试图在单引号内的
上进行历史扩展。尝试使用不同的shell。不,在这两种情况下,都使用
bash
或者
sh
,我得到了相同的错误。我应该提到我正在运行Mac OS 10.7.5Hmm…在我的Linux机器上的bash、csh和zsh中工作…很抱歉,我不知道!好的,看…你需要一个“备份”"在你的-i…-i.bak或任何东西上扩展。很好,现在它可以工作了!但是
-i
.bak
之间不应该有空格,否则它就失败了。这很有趣…我本来没有空格,但我看到了哪个有空格。太完美了。也创建了一个
.bak
文件,但这并不重要。我被咬了几次很多时候我没有那个bak文件,所以我不假思索地把它放了进去。当然,你可以把它删除。
sed -i.bak "/<d>/s/on .* at [^<]*/on newdate at newtime/" file.html