如何使用bash在html代码中插入标签

时间:2017-06-19 11:05:36

标签: bash shell sed

我有以下HTML代码:

<!DOCTYPE html>
<html>

   ...

<main>
   <div class=postLink>
      <a href="asdfa.html"> Write your title here</a>
      <div id="description"> Write the description of the post. It will show in the index.</div>
     <div id="datePost">19-06-2017</div>
     <div id="tags">
     </div>
  </div>

 <div class=postLink>
     <a href="aasdf.html"> Write your title here</a>
     <div id="description"> Write the description of the post. It will show in the index.</div>
     <div id="datePost">19-06-2017</div>
     <div id="tags">
     </div>
 </div>
 ...

</main>
<footer>
</footer>
</body>
</html>

我想在div中插入标签,但只有一次。

我试着这样做:

for tag in $tags
do
    sed -i "/<div id=\"tags\">/a <a href=\"$publicDir\/tags\/$tag\">$tag</a>" $publicDir/index.html
done

但这会产生所有postLink都有所有标签。

我只希望postlink的标签不是其他的postLink。像那样:

<div class=postLink>
      <a href="asdfa.html"> Write your title here</a>
      <div id="description"> Write the description of the post. It will show in the index.</div>
     <div id="datePost">19-06-2017</div>
     <div id="tags">
        <a href="publicDir/tags/Hellotag"> Hellotag</a>
        <a href="publicDir/tags/Othertag"> Othertag</a>
     </div>
  </div>

  <div class=postLink>
      <a href="asdfa.html"> Write your title here</a>
      <div id="description"> Write the description of the post. It will show in the index.</div>
     <div id="datePost">19-06-2017</div>
     <div id="tags">
        <a href="publicDir/tags/Byetag"> Byetag</a>
        <a href="publicDir/tags/Xtag"> Xtag</a>
     </div>
  </div>

抱歉我的英文不好。

2 个答案:

答案 0 :(得分:0)

我从另一个角度解决了这个问题。 我所做的是创建一个名为string的变量,其中包含html代码&#34; postlink&#34;之前标签必须在哪里。然后for循环追加标签代码,最后添加div结束。

所以我只有一个&#34; postlink&#34;使用标签和标签不会影响以前在html页面上可能存在的postlink。

string="<div class=postLink>\n\t <a href=\"$file.html\">$title</a>\n <div id=\"description\">$description</div>\n<div id=\"datePost\">$date</div>\n<div id=\"tags\">\n"

for tag in $tags
do 
    string+="<a href=\"$publicDir\/tags\/$tag\">$tag</a>\n"
done
string+="</div>\n</div>"

sed -i "/<main>/a $string" "$publicDir/index.html"

感谢John Goofy和123试图帮助我。 :)

答案 1 :(得分:0)

通过使用awk并在标签div中传递要打印的所需文本作为变量应该实现您所需要的。您可以使用for循环在tags目录中的不同文件中构造此变量,只需确保在需要时添加新行和制表符。

awk -v var="\n\t<a href=\"publicDir/tags/Byetag\"\> Byetag</a>\n\t<a href=\"publicDir/tags/Xtag\"> Xtag</a>\n" '{ if ( $0 ~ "tags"  &&  done != 1 ) { print $0var;done=1 } else { printf $0"\n" } }' html

如果html是有问题的文件,我们将文本传递给一个名为var的变量,然后我们在其中找到一个包含标签的行(你可以在必要时“确定”reg表达式)我们打印行和附加文本。然后将变量done设置为1以确保if语句在下一个div标记上失败并且不打印文本。