Как я могу изменить определенный повторяющийся текст в очень большом файле HTML?

У меня есть очень большой файл HTML (около 20 МБ), и мне нужно удалить из файла большое количество узлов вида:

<tr><td>SPECIFIC-STRING</td><td>RANDOM-STRING</td><td>RANDOM-STRING</td></tr><tr><td style = "padding-top:0" colspan = "3">RANDOM-STRING</td></tr>

Файл, над которым мне нужно работать, в основном состоит из тысяч этих строк, и мне нужно удалить только те, у которых есть определенная первая строка, например, все те, у которых первой строкой является «банан»:

<tr><td>banana</td><td>RANDOM-STRING</td><td>RANDOM-STRING</td></tr><tr><td style = "padding-top:0" colspan = "3">RANDOM-STRING</td></tr>

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

<tr><td>banana</td><td>(.*)</td><td>(.*)</td></tr><tr><td(.*)</td></tr>

но вывод консоли состоял в том, что она удалила количество вхождений X, когда я знаю, что вхождений намного больше, чем в файле. Firefox, Chrome и Brackets не могут даже просмотреть html-код файла из-за его размера. Я не могу придумать другого способа сделать это из-за моего большого отсутствия опыта работы с HTML.

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

Alexander Nied 23.03.2022 00:55
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
1
30
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Популярный редактор — sed. Он поддерживает RegEx.

Ваша команда будет иметь следующую структуру.

sed -i -E 's/SEARCH_REGEX/REPLACEMENT/g' INPUTFILE
  • -E за поддержку расширенного RegEx
  • -i для режима редактирования на месте
  • s означает, что вы хотите заменить значения
  • g для global. По умолчанию sed заменяет только первое вхождение, поэтому для замены всех вхождений вы должны предоставить g
  • SEARCH_REGEX — это RegEx, который вам нужен для поиска подстрок, которые вы хотите заменить
  • REPLACEMENT — это значение, которым вы хотите заменить все совпадения
  • INPUTFILE — это файл, который sed будет читать построчно и делать замену за вас.

Хотя регулярное выражение может быть не лучшим инструментом для выполнения такой работы, попробуйте эту настройку вашего шаблона:

<tr><td>banana</td><td>(.*?)</td><td>(.*?)</td></tr><tr><td(.*?)</td></tr>

Это делает ваши .* совпадения ленивыми. Мне интересно, не потребляют ли эти шаблоны слишком много.

Другие вопросы по теме