Pobieranie tekstu ze znacznika HTML w pliku lokalnym za pomocą grep


Możliwy duplikat

:
RegEx pasuje do otwartych tagów innych niż samodzielne tagi XHTML
https://coderoad.ru/1732348/Wyciąg z pliku wejściowego
<TD class="clsTDLabelWeb" width="28%">Municipality:&nbsp;</TD>
<TD style="WIDTH: 394px" class="clsTDLabelSm" colSpan="5">
<span id="DInfo1_Municipality">JUPITER</span></TD>

Moje wyrażenie regularne
(?<=<span id="DInfo1_Municipality">)([^</span>]*)

Mam plik HTML zapisany na dysku.

Chciałbym użyć grep do wyszukiwania w pliku i wyprowadzenia zawartości określonego zakresu

chociaż nie wiem, czy użycie grep jest poprawne. Kiedy uruchamiam grep na pliku z wyrażeniem odczytanym z innego pliku (aby nie zepsuć unikania znaków specjalnych), nic nie wyświetla. Sprawdziłem wyrażenie w RegExr i pasuje do „JUPITER”, czyli dokładnie to, co chcę zwrócić. Dziękuję bardzo za Twoją pomoc!
Pożądany rezultat
JUPITER

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Spróbuj tego:
sed -n 's|^<span id="DInfo1_Municipality">\([^<]*\)</span></TD>$|\1|p' file

lub z GNU
grep
i swoim wyrażeniem regularnym:
grep -Po '(?<=<span id="DInfo1_Municipality">)([^</span>]*)'
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Grep nie obsługuje tego typu wyrażeń regularnych (lookbehind assertions) i jest do tego bardzo złym narzędziem, ale dla przykładu podanego, że działa, będzie się łamał w wielu sytuacjach.
grep -io "<span id=\"DInfo1_Municipality\">.*</span>" file.htlm | grep -io ">[^<]*" | grep -io [^>]*

coś takiego szalonego nie jest dobrym pomysłem.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

sed -n '/DInfo1_Municipality/s/<\/span.*//p' file | sed 's/.*>//'

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się