如何使用Shell脚本在两个特定的html标签之间插入代码块?

时间:2019-05-27 15:30:35

标签: html shell

我需要在以下两个特定标签(html文件)之间插入代码块(实际上,这是一个adsense广告脚本):

</style>
<table border="1" class="dataframe">

我需要将其插入这两个标签的第三次出现。 典型的Adsense块的形式为:

<script async 
  src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"> 
</script>
<script>
 lorem ipsum...                          
</script>

最后,我需要这样的东西:

</style>

 <script async 
  src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"> 
  </script>
  <script>
   lorem ipsum...                            
  </script>

<table border="1" class="dataframe">

我已经使用sed插入了代码块并指出了行号,在这种情况下,由于行号可以更改,因此无法这样做。 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果可以使用bash,请尝试此操作。这个解决方案不是很快,但是应该可以。

insert_rubbish.sh

#!/bin/bash

StartPattern='</style>'
StopPattern='<table border="1" class="dataframe">'

content=$(cat << EOT
<script async
  src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">
</script>
<script>
 lorem ipsum...
</script>
EOT
)

# loop over all lines
while read -r line; do

    # if pattern found
    if [[ $line =~ $StopPattern && $lastline =~ $StartPattern ]]; then

       # is it the third fund? --> then print content
       if [[ $count == 2 ]]; then
          printf "%s\n" "$content"
       fi

       # count pattern match
       (( count++ ))
    fi

    # write line
    printf "%s\n" "$line"

    # save line for next pattern match
    lastline="$line"
done < "$1" 

用法

insert_rubbish.sh "/path/to/your/file.html" > output.html