HTMLの検索と置換または削除 Linuxでsedタグを使用する

HTMLの検索と置換または削除 Linuxでsedタグを使用する

<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で正規表現を使用するのが最善の選択だと思います。いくつかの方法を試しましたが、解決策が見つかりませんでした。 index.htmlファイルには他のタグがありますが、<li>とにかく編集しないでください。上記のタグのみを削除する必要があります。

よろしくお願いします。

ベストアンサー1

ドキュメントの断片が正しい形式のXHTMLファイルの一部であると仮定すると、プロパティ値は、次を使用するノードを含むliすべてのノードを削除できます。ahrefhttps://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回転したディレクトリ構造内のすべてのファイルに対してこのコマンドを実行するには、top-dirxmlstarletのように呼び出します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見つかった各ファイルに対してindex.html新しいファイルを生成します。上記のコマンドから実行を削除する前に、これらのファイルを調べて、.new正常に見えることを確認する必要があります。

明らかにあなたも入らなければなりませんコピーテスト中にデータがバックアップされました。

おすすめ記事