0

我想运行一个脚本来更改 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>(with grep) 的整行,然后在作为新字符串的注释之后添加新行,但失败了。例如,如果我只想text在注释后插入字符串,然后使用

sed -i 's/<!--date-->/<!--date-->text/' file.html

我明白了invalid command code j。我认为这可能是因为字符串中有一些特殊字符,如<,!>,但如果我想放入上面的日期字符串,我会有更多,比如:and /。感谢您提供有关如何解决此问题的任何想法。

4

3 回答 3

1

你不需要你的 <!--date--> hack。您可以在 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
于 2013-05-15T15:02:44.467 回答
1

这将仅更改包含以下内容的行上的文本<d>

sed -i.bak "/<d>/s/on .* at [^<]*/on newdate at newtime/" file.html

我已经使用 MacOS X 10.8.3 附带的 BSD sed 对此进行了测试

于 2013-05-15T15:03:07.007 回答
0

使用命令行时,尝试像这样转义特殊字符:
!===>\!

于 2013-05-15T14:57:45.460 回答