Suchen und Ersetzen oder Entfernen von HTMLTag mit sed in Linux

Suchen und Ersetzen oder Entfernen von HTMLTag mit sed in Linux

Ich muss das folgende HTML- <li>Tag in vielen index.html-Seiten entfernen.

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

Ich muss dies rekursiv in vielen Dateien entfernen. Ich denke also, dass die Verwendung von Regex in sed unter Linux die beste Option ist. Ich habe es auf viele Arten versucht, konnte jedoch keine Lösung finden. Es gibt andere <li>Tags in der Datei index.html, aber diese sollten auf keinen Fall bearbeitet werden. Nur das oben erwähnte Tag sollte entfernt werden.

Vielen Dank im Voraus.

Antwort1

Vorausgesetzt, das Dokumentfragment ist Teil einer wohlgeformten XHTML-Datei, können Sie alle Knoten löschen , die einen Knoten mit einem Attribut lienthalten , dessen Wert genau wie folgt lautet :ahrefhttps://forward.global.ssl.fastly.net/contributoragreements/xmlstarlet

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

Wenn es sich bei dem Dokument nicht um ein wohlgeformtes XHTML-Dokument handelt, können Sie zunächst versuchen, es wiederherzustellen:

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

index.htmlUm dies für alle Dateien in einer Verzeichnisstruktur auszuführen , die bei verrottet ist top-dir, rufen Sie es wie folgt xmlstarletauf :find

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 {} +

Das obige würde index.html.newfür jede gefundene index.htmlDatei eine neue Datei namens „removed“ erstellen. Sie sollten sich diese Dateien ansehen und entscheiden, ob sie in Ordnung aussehen, bevor Sie .newden obigen Befehl mit „removed“ ausführen.

Sie sollten dies offensichtlich auf einemKopierenIhrer gesicherten Daten während des Tests.

verwandte Informationen