我想运行一个脚本来更改HTML代码中的一行,指明页面上次更新的时间。例如,我有一行
<d>This page was last updated on 29.04.2013 at 00:34 UTC</d>
我现在正在更新它,所以我想用
替换该行 <d>This page was last updated on 15.05.2013 at 15:50 UTC</d>
这是我的源代码中唯一具有<d>
标记的行,所以希望这有帮助。我已经有一些代码生成带有当前日期和时间的新字符串,但我无法找到替换旧字符串的方法(这会改变,所以我不知道完全什么它是)。
我已尝试在上一行添加评论<!--date-->
,删除包含<d>
(带grep
)的整行,然后在该行之后添加新行注释是新字符串,但失败了。例如,如果我只想在注释后插入字符串text
,并使用
sed -i 's/<!--date-->/<!--date-->text/' file.html
我得到invalid command code j
。我想这可能是因为字符串中有一些特殊字符,如<
,!
和>
,但如果我想在上面添加日期字符串,我会有更多,例如:
和/
。感谢您提供有关如何解决此问题的任何想法。
答案 0 :(得分:1)
您不需要&lt;! - date - &gt;黑客攻击。您可以在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
或者,如果您在名为$ replacement的变量中有更新:
sed -i.bak "s@<d>This page was last updated on.*</d>@$replacement@" whatever.html
答案 1 :(得分:1)
这将仅在包含<d>
:
sed -i.bak "/<d>/s/on .* at [^<]*/on newdate at newtime/" file.html
我已经使用MacOS X 10.8.3附带的BSD sed对此进行了测试
答案 2 :(得分:0)
使用命令行时,请尝试转义特殊字符,如下所示:
!
===&gt; \!