Как объединить две команды SED regex? - PullRequest
0 голосов
/ 19 сентября 2019

Я прочитал все ответы, которые смог найти в SOF, к сожалению, ни один из них не привел меня к решению.У меня есть тысячи файлов с адресной информацией, и каждая из моих команд SED работает самостоятельно

Соответствует адресу

sed -n -e 's/^.*address23ca storeh2..\(.*\) Address<\/h2.*optmob..\(.*\)<br>\(.*\)<br>\(.*\)<br>\(.*\)<\/p><p class="addressbox23.*Telephone: \(.-...-...-....\)\(.*\).*v1\/place?..\(.*\)&key.*$/\1,\2,\3,\4,\5,\6/p' afile.html

$ 142 Wayne Street,Abbey,Saskatchewan,S0N 0A0,1-232-321-4321

Соответствует GPS

sed -n -e 's/^.*v1\/place?..\(.*\)&key.*$/\1/p' abbey.html

$ 50.736301,-108.757103

Я попробовал следующее, но оно не прекращает сопоставление после телефонного номера, вместо этого оно продолжается до совпадения v1\/place?, а затем останавливается.Я не могу понять, как прекратить сопоставление по номеру телефона и начать сопоставление заново для GPS.

Как я могу объединить эти два совпадения?

sed -n -e 's/^.*address23ca storeh2..\(.*\) Address<\/h2.*optmob..\(.*\)<br>\(.*\)<br>\(.*\)<br>\(.*\)<\/p><p class="addressbox23.*Telephone: \(.-...-...-....\)\(.*\).^*v1\/place?..\(.*\)&key.*$/\1,\2,\3,\4,\5,\6,\7/p' afile.html

$ 142 Wayne Street,Abbey,Saskatchewan,S0N 0A0,1-232-321-4321 LOADS OF unnecessary HTML src="https://www.google.com/maps/embed

Урезанная версияфайл

<!DOCTYPE html>
<html lang="en"> <!--<![endif]-->
<head></head><body> <div class="large-7 columns small-12 addWrap23ca"> <div class="storeH2Wrap23ca"> <h2 class="address23ca storeh2">Canada Post Abbey Address</h2></div><p class="addressbox23ca optmob">142 Wayne Street<br>Abbey<br>Saskatchewan<br>S0N 0A0</p><p class="addressbox23ca optmob">Telephone: 1-866-607-6301</p></div></div><div class="row"> <div class="large-12 medium-12 columns small-12"> <div class="row"> <div class="large-12 columns small-12"> <div class="storeH2Wrap23ca"> <h2 class="hours23ca storeh2">Canada Post Abbey Opening Hours</h2></div><div class="hoursCont23ca"> 13:00-16:30</p><p>Closed</p><p>Closed</p></div></div><div class="notesWrap23ca"><div class="notesTitle23ca"><p class="noteHeading23ca">Post Office Notes</p></div><div class="notesContent23ca"><p class="note23ca">This Post Office Branch closes for lunch on certain days - please see opening hours.</p></div></div></div></div></div></div><div class="row"> <div class="mapadCont23ca"> <div class="large-12 medium-12 columns small-12 map23ca"> <div class="storeH2Wrap23ca storeH2WrapMap23ca"> <h2 class="maptitle23ca storeh2">Canada Post Abbey Map Location</h2></div><div class="mapBreadCrumbs23ca"><ul><li><a href="../canada-post/canada-post.html">Canada Post Locator</a></li><li>&gt;</li><li><a href="saskatchewan.html">Canada Post Saskatchewan</a></li><li>&gt;</li><li>Canada Post in Abbey</li></ul></div> <div class="mapCont23ca"> <iframe width="100%" height="434" frameborder="0" src="https://www.google.com/maps/embed/v1/place?q=50.736301,-108.757103&key=AIzaSyDmJApckRpAR1uhfdfz_QedneaF5lAlrQU"></iframe></div><div class="searchagainouter23ca"> <div class="adddivclear" style="clear:both;"></div></body></html>

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019

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

#! /usr/bin/env python3
from html.parser import HTMLParser

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print("Found a start tag:", tag)
        print("\tattrs:", attrs)
    def handle_endtag(self, tag):
        print("Found an end tag:", tag)
    def handle_data(self, data):
        print("Found data:", data)

MyHTMLParser().feed('''
<!DOCTYPE html>
<html lang="en"> <!--<![endif]-->
<head></head><body> <div class="large-7 columns small-12 addWrap23ca"> <div class="storeH2Wrap23ca"> <h2 class="address23ca storeh2">Canada Post Abbey Address</h2></div><p class="addressbox23ca optmob">142 Wayne Street<br>Abbey<br>Saskatchewan<br>S0N 0A0</p><p class="addressbox23ca optmob">Telephone: 1-866-607-6301</p></div></div><div class="row"> <div class="large-12 medium-12 columns small-12"> <div class="row"> <div class="large-12 columns small-12"> <div class="storeH2Wrap23ca"> <h2 class="hours23ca storeh2">Canada Post Abbey Opening Hours</h2></div><div class="hoursCont23ca"> 13:00-16:30</p><p>Closed</p><p>Closed</p></div></div><div class="notesWrap23ca"><div class="notesTitle23ca"><p class="noteHeading23ca">Post Office Notes</p></div><div class="notesContent23ca"><p class="note23ca">This Post Office Branch closes for lunch on certain days - please see opening hours.</p></div></div></div></div></div></div><div class="row"> <div class="mapadCont23ca"> <div class="large-12 medium-12 columns small-12 map23ca"> <div class="storeH2Wrap23ca storeH2WrapMap23ca"> <h2 class="maptitle23ca storeh2">Canada Post Abbey Map Location</h2></div><div class="mapBreadCrumbs23ca"><ul><li><a href="../canada-post/canada-post.html">Canada Post Locator</a></li><li>&gt;</li><li><a href="saskatchewan.html">Canada Post Saskatchewan</a></li><li>&gt;</li><li>Canada Post in Abbey</li></ul></div> <div class="mapCont23ca"> <iframe width="100%" height="434" frameborder="0" src="https://www.google.com/maps/embed/v1/place?q=50.736301,-108.757103&key=AIzaSyDmJApckRpAR1uhfdfz_QedneaF5lAlrQU"></iframe></div><div class="searchagainouter23ca"> <div class="adddivclear" style="clear:both;"></div></body></html>
''')
0 голосов
/ 19 сентября 2019

Вы можете объединить два регулярных выражения с точкой с запятой

$ echo "etts" | sed 's/et/te/; s/ts/st/'
test
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...