
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 li
enthalten , dessen Wert genau wie folgt lautet :a
href
https://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.html
Um dies für alle Dateien in einer Verzeichnisstruktur auszuführen , die bei verrottet ist top-dir
, rufen Sie es wie folgt xmlstarlet
auf :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.new
für jede gefundene index.html
Datei eine neue Datei namens „removed“ erstellen. Sie sollten sich diese Dateien ansehen und entscheiden, ob sie in Ordnung aussehen, bevor Sie .new
den obigen Befehl mit „removed“ ausführen.
Sie sollten dies offensichtlich auf einemKopierenIhrer gesicherten Daten während des Tests.