Найти и заменить или удалить HTMLтег с использованием sed в Linux

Найти и заменить или удалить HTMLтег с использованием sed в Linux

Мне нужно удалить следующий HTML- <li>тег на многих страницах 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>

Мне нужно удалить это рекурсивно во многих файлах. Поэтому я думаю, что использование regex в sed в Linux — лучший вариант. Я пробовал разными способами, но не смог найти решение. <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для каждого найденного index.htmlфайла. Вы должны просмотреть эти файлы и решить, выглядят ли они нормально, прежде чем запускать с .newудаленным из команды выше.

Очевидно, вам следует запустить это накопияваших резервных копий данных во время тестирования.

Связанный контент