Удалить строку HTML-кода с переменной в нескольких файлах

0

У меня есть несколько html файлов. В них есть кнопки доступа, установленные на next и previous страницу. Ссылки на эти 2 страницы помещаются в верхний и нижний колонтитулы. Из-за двуличности ключ доступа не работает должным образом (то есть, откройте страницу).

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

Поскольку он содержит имя файла, который должен быть открыт, мне нужно создать либо var для этих имен файлов, либо какую-то другую, более сложную команду (следующую, которую я использую, чтобы переименовать все файлы в ### {000.. 999}). Я не знаю, если следующий сложный cmd изменит имя вывода html файлов (это не желательно)

$ ls *.html | awk 'BEGIN{ a=0 }{ printf "sed -i '2!b;s/<a accesskey="p" href="%s">Prev</a>/' *.html  %s\n", $0, a++ }' | bash


Только sed cmds (для ясности):

$ sed -i '2!b;s/<a accesskey="p" href="%s">Prev</a>/' *.html

$ sed -i '2!b;s/<a accesskey="n" href="%s">Next</a>/' *.html


Как это можно сделать? Я пробовал искать веб-сайты (возможно, я просто не знаю, как это описать), попробовал много команд со многими опциями, но я просто не могу это получить :)

Обновление # 2
Пример ввода

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<html xmlns="http://www.w3.org/1999/xhtml"><td width="20%" align="left"><a accesskey="j" href="contrastchapter.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Contrasts</th><td width="20%" align="right"> <a accesskey="k" href="ch03s02.html">Next</a></td></tr></table><hr/>


Примерный вывод того же

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<html xmlns="http://www.w3.org/1999/xhtml"><td width="20%" align="left"></td><th width="60%" align="center">Chapter 3. Contrasts</th><td width="20%" align="right"></td></tr></table><hr/>
  • 0
    Пример ввода и ожидаемый результат поможет
Теги:
sed
var

1 ответ

1
Лучший ответ

Я не уверен, что вы пытаетесь сделать точно. Ваш пример оболочки не выполняется. Я думаю, вы хотите удалить, например,

<a accesskey="j" href="contrastchapter.html">Prev</a>

а также

<a accesskey="k" href="ch03s02.html">Next</a>

в строке 2 в ваших html файлах.

Если да, почему бы не попробовать

#!/bin/sh                                                                                                                                    
ls *.html | while read line
do
    sed -i  ' 1,2 {                                                                                                                      
            s:<a accesskey="j" href="[[:alnum:].]*">Prev</a>::                                                                               
            s:<a accesskey="k" href="[[:alnum:].]*">Next</a>::                                                                               
        }' $line

done

Я предполагаю, что имена файлов состоят из буквенно-цифровых символов или периода... Возможно, вам придется настроить это

  • 0
    Вы все правильно поняли. И ваш сценарий работал отлично. Спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню