Buscar y reemplazar o eliminar HTMLetiqueta usando sed en Linux

Buscar y reemplazar o eliminar HTMLetiqueta usando sed en Linux

Necesito eliminar la siguiente <li>etiqueta html en muchas páginas index.html.

<li>
                      <a href="https://forward.global.ssl.fastly.net/contributoragreements/" onclick="_gaq.push(['_trackEvent', 'ClickTracking', 'TopNav_Contact_Editorial', window.location.href]);">Editorial</a>
                    </li>

Necesito eliminar esto de forma recursiva en muchos archivos. Entonces supongo que usar expresiones regulares en sed en Linux es la mejor opción. Lo intenté de muchas maneras pero no pude encontrar una solución. Hay otras <li>etiquetas dentro del archivo index.html pero no deben editarse de ninguna manera. Sólo se debe eliminar la etiqueta mencionada anteriormente.

Muchas gracias de antemano.

Respuesta1

Suponiendo que el fragmento del documento es parte de un archivo XHTML bien formado, puede eliminar todos lilos nodos que contengan un anodo con un hrefatributo cuyo valor sea exactamente https://forward.global.ssl.fastly.net/contributoragreements/el siguiente xmlstarlet:

xmlstarlet ed --delete '//li[a/@href = "https://forward.global.ssl.fastly.net/contributoragreements/"]' file.xhtml

Si el documento no es un documento XHTML bien formado, puedes intentar recuperarlo primero:

xmlstarlet fo --recover --html file.html |
xmlstarlet ed --delete '//li[a/@href = "https://forward.global.ssl.fastly.net/contributoragreements/"]'

Para ejecutar esto en todos index.htmllos archivos en una estructura de directorios podrida en top-dir, llame xmlstarletdesde findasí:

find top-dir -type f -name index.html -exec sh -c '
    tmpfile=$(mktemp)
    for pathname do
        cp "$pathname" "$tmpfile"
        xmlstarlet fo --recover --html "$tmpfile" |
        xmlstarlet ed --delete "//li[a/@href = \"https://forward.global.ssl.fastly.net/contributoragreements/\"]" >"$pathname.new"
    done
    rm -f "$tmpfile"' sh {} +

Lo anterior crearía un nuevo archivo llamado index.html.newpara cada index.htmlarchivo encontrado. Debes mirar estos archivos y decidir si se ven bien antes de ejecutarlos con .newel comando anterior eliminado.

Obviamente deberías ejecutar esto en unCopiarde sus datos respaldados durante la prueba.

información relacionada