sed / awk在文件中的特定位置插入行

时间:2012-10-11 15:28:59

标签: linux sed awk

我有一个包含网址的index.html文件。实施例

    <!-- UC -->
        <A href="uc/live/current/index.html" >UC Live</A>&nbsp
        <A href="uc/live/" >(All months)</A><br>
    <!-- VI -->
        <A href="vi/live/current/index.html" >VI Live</A>&nbsp
        <A href="vi/live" >(All months)</A><br>
    <!-- NQ-PRO -->
        <A href="nq/live/current/index.html" >NQ Live</A>&nbsp
        <A href="nq/live/" >(All months)</A><br>
  </body>
</html>

我想为自动化编写脚本,因此它会在</body>标记上方自动添加3行节。例如,我想在</body>标记上方添加以下行。我相信我们可以使用sed / awk来做到这一点,但不知道怎么做?

<!-- EX -->
        <A href="ex/live/current/index.html" >EX Live</A>&nbsp
        <A href="ex/live/" >(All months)</A><br>

3 个答案:

答案 0 :(得分:1)

sed '/\<\/body\>/i\
    <!-- EX -->\
        <A href="ex/live/current/index.html" >EX Live</A>&nbsp\
        <A href="ex/live/" >(All months)</A><br>' index.html

i命令在匹配模式的行之前插入数据。以反斜杠结尾的连续行被添加。您可能不得不担心插入行上的空白。

答案 1 :(得分:1)

尝试以下简单的sed命令(GNU sed

sed 's@</body>@\t<!-- EX -->\n\t<A href="ex/live/current/index.html" >EX Live</A>&nbsp;\n\t<A href="ex/live/" >(All months)</A><br>\n</body>@'

无需使用/作为分隔符,它可以是您想要的,这里我们有分隔符@

便携式解决方案 (在Solaris 11FreeBSD 8.0Archlinux

上测试过
sed 's@</body>@  <!-- EX -->\
        <A href="ex/live/current/index.html" >EX Live</A>&nbsp;\
        <A href="ex/live/" >(All months)</A><br>\
</body>@' file.html

答案 2 :(得分:1)

将3行保存在变量a

然后:

awk -v a=$a '/<\/body>/{t=$0;$0=a"\n"t;}1' index.html