
Мне нужно удалить следующий 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
удаленным из команды выше.
Очевидно, вам следует запустить это накопияваших резервных копий данных во время тестирования.