Удалите строки из HTML-файла, содержащего шаблон, используя команды Unix - PullRequest
0 голосов
/ 26 июля 2010

У меня есть грязный HTML, который выглядит следующим образом:

<div id=":0.page.0" class="page-element" style="width: 1620px;">
 <div>
  <img src="viewer_files/viewer_004.png" class="page-image" style="width: 800px; height: 1131px; display: none;">
  <img src="viewer_files/viewer_005.png" class="page-image" style="width: 1600px;">
 </div>
</div>// this repeats 100+ times with different 'src' attributes

Теперь это всего одна строка на самом деле (я отформатирован в несколько строк для удобства чтения).Я пытаюсь удалить все теги <img>, для которых установлен display:none; во встроенном CSS.Возможно ли использовать sed / awk или какую-либо другую команду unix для достижения этой цели?Я думаю, если бы это был документ с хорошим отступом, это было бы легко.

Ответы [ 6 ]

3 голосов
/ 26 июля 2010

Я бы использовал Twig или XMLStarlet для такой обработки. Намного надежнее, чем sed / awk / grep. Поскольку ваш шаблон является регулярным и повторяющимся, они тоже будут работать.

3 голосов
/ 26 июля 2010

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

2 голосов
/ 26 июля 2010
sed 's/<img.*display: none;[^>]>//g' file
1 голос
/ 26 июля 2010
sed -e "s/<img[^>]*display: none;[^>]*>//g" filein

Краткое объяснение о sed:

s означает подстановку / являются разделителями

s означает, что первое поле будет шаблоном для поиска, который будет заменен навторой.Последний вариант.g означает глобальный (замените его много раз, если найдено много совпадений).

для замены на месте: sed -i -e "..."

0 голосов
/ 03 января 2017

Sed имеет несколько команд, но большинство людей изучают только команду замены: «s».Полезная команда удаляет каждую строку, соответствующую ограничению: " d ".

sed -e "/<img[^>]*display: none;[^>]*>/d" File 

Будьте осторожны, это удаляет всю строку.

0 голосов
/ 26 июля 2010

Это сделало бы

sed -e "s@<img.*display: none;.*>@@g" FILINAME
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...