Strona 1 z 1

[+] bash - usunięcie z tekstu wszystkiego oprócz pasującego do wzorca

: 18 kwietnia 2011, 16:08
autor: timo
Witam.
Za pomocą sed-a mogę usunąć fragment znacznika zawierający adres do następnej strony:

Kod: Zaznacz cały

sed 's/<a href=[^>]*class="next_page//'
A potrzebuję czegoś działającego dokładnie na odwrót, tzn. usuwający z długiego tekstu wszystko inne oprócz fragmentu pasującego do wzorca. Proszę o podpowiedź, jak to zrobić.

: 18 kwietnia 2011, 18:20
autor: kodama
Hej
Ja mam taki skrypt, który operuje na pliku tekstowym (stworzonym przez tesseract-ocr z wycinka strony). W tym pliku szukam sobie ciągu, który zaczyna się od cyfry 3 i jest po nim 6 znaków. To polecenie:

Kod: Zaznacz cały

sed -n 's/.*\(3[A-Z0-9]\{6\}\).*/\1/p' plik_z_tekstem 
wyciąga mi taki właśnie fragment jak potrzeba. Ja sobie go później zapisuję do osobnego pliku. Wystarczy, że sobie dopasujesz wzorzec i powinno być ok.

: 18 kwietnia 2011, 21:23
autor: timo
Dziękuję bardzo, właśnie o coś takiego mi chodziło.

: 23 kwietnia 2011, 09:29
autor: ksysinek
A jak znaleźć w długim tekście ciąg znaków, który zaczyna się na

Kod: Zaznacz cały

<a href=jakisksrypt.php?key=xyz
a kończy na

Kod: Zaznacz cały

</a>
i nie wiadomo ile ma znaków? Męczę się z tym problemem już bardzo długo.

: 23 kwietnia 2011, 13:23
autor: timo
Tak samo, tylko trochę inaczej ;) Jeżeli ciąg jest w jednej linii tego tekstu i między tym, co podałeś jako początek, a tym, co podałeś jako koniec ciągu nie występuje ani jeden znak mniejszości < to taki kod załatwia sprawę:

Kod: Zaznacz cały

sed -n 's/.*\(<a href=jakisksrypt.php?key=xyz[^<]*<[/]a>\).*/\1/p' plik_z_tekstem

: 23 kwietnia 2011, 14:07
autor: ksysinek
Świetnie, działa ;)