Как изменить много HTML-файлов одновременно?

У меня есть тысячи HTML-файлов, которые я хотел бы изменить одновременно в системе Fedora. Было бы заменить style.css от ../headers.css и заменить другую длинную цепь, которую вы можете увидеть здесь: http://pastebin.com/PHAz8Q4C

2 ответа

Решение

Я бы рекомендовал использовать такой инструмент, как sed который может делать замены текста / регулярных выражений в файле.

Сочетая это с find а также xargs это хорошее начало, чтобы заставить его работать с большим количеством файлов.

Так, например, вы могли бы сделать что-то вроде

find -name "*.html" -print0 | xargs -0 sed -i 's#style.css#../headers.css#g'

Поскольку отменить эту операцию невозможно, я бы порекомендовал сделать резервную копию файлов на всякий случай (или использовать контроль версий!)

РЕДАКТИРОВАТЬ: Руководство о том, как расширить это на другие условия поиска / замены (например, ваш pastebin):

Та же идея Просто убедитесь, что вы все правильно избежали. В качестве объяснения, которое может помочь вам...

  • find находит все html файлы
  • xargs запускает команду после нее для каждого файла
  • sed делает замену
  • -i говорит sed сделать это на месте
  • s говорит это Substitute
  • style.css что заменить
  • ../headers.css это то, что заменить его
  • а также g говорит ему заменить все вхождения в файле.

Для вашего длинного кода, вы можете попробовать это:

find . -name "*.html" -exec sed -i 's#<a href="\.\./index.html">&laquo;</a> <h1>\(.*\)</h1>#<section class="skin-organic" role="region">\n  <header>\n    <a href="../index.html"><span class="icon icon-back">back</span></a>\n    <h1>\1</h1>\n  </header>\n</section>#g' {} \;
Другие вопросы по тегам