
<li>
多くの index.html ページから次の 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>
多くのファイルでこれを再帰的に削除する必要があります。したがって、Linux の sed で正規表現を使用するのが最善のオプションだと思います。さまざまな方法を試しましたが、解決策が見つかりませんでした<li>
。index.html ファイル内には他のタグもありますが、それらは編集しないでください。上記のタグのみを削除する必要があります。
よろしくお願いします。
答え1
ドキュメント フラグメントが適切に形成された XHTML ファイルの一部であると仮定すると、次のようにして値が正確に一致する属性を持つノードをli
含むすべてのノードを削除できます。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
ドキュメントが適切に形成された XHTML ドキュメントでない場合は、まずそれを回復してみることができます。
xmlstarlet fo --recover --html file.html |
xmlstarlet ed --delete '//li[a/@href = "https://forward.global.ssl.fastly.net/contributoragreements/"]'
index.html
で rotted されたディレクトリ構造内のすべてのファイルに対してこれを実行するにはtop-dir
、次のようxmlstarlet
に から呼び出します。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 {} +
上記では、index.html.new
見つかったファイルごとに という新しいファイルが作成されます。上記のコマンドから removed をindex.html
使用して実行する前に、これらのファイルを調べて問題がないかどうかを判断する必要があります。.new
明らかにこれを実行する必要がありますコピーテスト中にバックアップしたデータ。