Извлечение определенной строки после данной строки из файла HTML с помощью сценария удара

У меня есть файл HTML momcpy.html из которого я хочу извлечь определенную строку после данной строки. Содержание файла похоже:

<tr><br>
<th height="12" bgcolor="#808080"><label for="<br>
 LSCRM:Abhijeet<br>
 <br>
 MCRM:Bhargav<br>
 <br>
 TLGAPI:GAURAVAURAV<br>
 <br>
 MOM:MANIKA"></td><br>

Это присутствует на одной из строк HTML.

Я хочу извлечь Manika и сохраните его в переменной. Так В основном я хочу извлечь независимо от того, что строка присутствует после МАМЫ: Это могло быть динамично.

Я попробовал:

file='/home/websphe/tomcat/webapps/MOM/web/momcpy.html'
  y=$( awk '$1=="MOM:"{print $2}' $file)
 echo "$y"

Но это не работало.

5
задан 3 September 2017 в 14:13

3 ответа

Я не могу разумно советовать делать это, потому что парсинг HTML с regex вряд ли закончится хорошо, но Вы смогли получать строку MANIKA с

sed -nr '/MOM:/ s/.*MOM:([^"]+).*/\1/p' file

Это работает хорошо над Вашим образцом так или иначе...

Примечания

  • -n ничего не печатайте, пока мы не попросим его
  • -r используйте ДО
  • /string/ найдите строки с string
  • s/old/new/ замена old с new
  • .* любое количество любых символов
  • ([^"]+) сохраните некоторые символы, которые не являются "
  • \1 обратная ссылка на сохраненные символы
  • p распечатайте просто строки, которые мы изменили
7
ответ дан 23 November 2019 в 08:44
grep -Po 'MOM:\K[^"]+' file.html

Предупреждение: это не очень надежное решение; И ваш HTML-код недействителен

5
ответ дан 23 November 2019 в 08:44

Строка, которую Вы ищете всегда, имеет MOM: перед ним, но Вы не сказали, имеет ли это всегда " после него. В целях этого ответа я предположу, что Вы ищете строки, которым разрешают содержать любой нижний регистр или прописные буквенные символы, цифры или символы нижнего подчеркивания. Они известны как словесные символы в терминологии регулярных выражений. Распознавание таких "слов" текста достаточно полезно, который большинство диалектов регулярных выражений имеет функции, чтобы помочь сделать так. Если это не то, что Вы хотите, можно изменить это решение соответственно, или можно использовать методы в других ответах.

Я повторяю David Foerster, Zanna, и мудрые предупреждения JJOAO о парсинге HTML с regex и об этом не быть устойчивым. Будьте осторожны, и рассмотрите, действительно ли то, что Вы запросили, точно, что Вы хотите сделать. В Вашем примере кода Вы присвоили путь к входному файлу к переменной $file, таким образом, я предположу, что это было сделано. Вы присвоили вывод своей команды к $y, таким образом, я сделаю то же.

С grep

Это подобно методу JJOAO, и можно использовать тот метод с заменой команды также, если регулярное выражение там больше подходит потребностей.

y="$(grep -oPm1 'MOM:\K\w+' "$file")"

-oPm1 просто более компактный способ записать -o -P -m 1.

Обратите внимание, что можно также добавить -m1 к команде в ответе JJOAO, таким образом, это использует только соответствия от первой строки, которая имеет любого.

Если первая строка с соответствием содержит несколько соответствий, это grep метод дает Вам всех их. Например, если та строка MOM:MANIKA MOM:JANE"></td><br> затем $y будет содержать значение:

MANIKA
JANE

С sed

Это напоминает метод Zanna.

y="$(sed -rn '0,/.*MOM:(\w+).*/ s//\1/p' "$file")"

Помимо того, чтобы быть включенным как замена команды, различия то, что я:

  • остановитесь после первой строки, которая содержит соответствие
  • соответствуйте одному или нескольким словесным символам (\w+) вместо символов до a " ([^"]+)
  • используйте нулевые или более произвольные символы (.*) во-первых, так, чтобы MOM: не должен появляться в самом начале строки
  • используйте более компактный синтаксис, который старается не писать шаблон дважды.

Техника, которую я использовал для этого, требует GNU sed, но это sed реализация обеспечивается в Ubuntu.

Если первая строка с соответствием содержит несколько соответствий, это sed метод дает Вам просто последний. От MOM:MANIKA MOM:JANE"></td><br> Вы добираетесь:

JANE
1
ответ дан 23 November 2019 в 08:44

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

Похожие вопросы: