[AWK] Wypisanie części RegExp ujętego w ()

0

Witam

Postanowiłem pouczyć się nieco awk a ściślej gawk i mam taką zagwózdkę. Wczoraj siedziałem nad nią do 3 :P i do niczego nie doszedłem...

Chodzi mi o to jak wypisać część wyrażenia regularnego ujętego w nawiasy. We wszystkich innych programach czy nawet choćby i w PHP miałbym to tak:
<font color="brown">/costam([0-9]+)lalala/ -> \1</span>
i jeśli w przetwarzanym tekście istniałby ciąg <font color="brown">costam123lalala</span> to powinienem uzyskać <font color="brown">123</span>.

No ale nie udało mi się tego dokonać w gawk.
Użycie \1 możliwe jest jedynie w funkcji gensub, jednak ona umie zamienić \1 na coś (np. wyciąć) ale żeby pozostawiła tylko \1 to już mi się nie udało.

Problem w tym, że cały przetwarzany tekst mam w jednej linii.
OK - udało mi się za pomocą gensub dodać entery na początku i końcu \1 więc teraz wystarczyłoby ponownie przeanalizować wynik - a że gawk analizuje domyślnie każdy wiersz osobno, to wtedy wystarczyłoby już takie coś:
<font color="brown">{if ($0 ~ /[0-9]+/) print}</span> i miałbym to, czego chcę.

No ale jak ponownie przeanalizować cały plik bez uruchamiania 2 skryptów?

Za wszelkie sugestie będę wdzięczny :)
Korzystam z tego manuala - co by mnie ktoś nie posądził, że nie szukalem :P

0

match($0, /costam([0-9]+)/) { ZM=substr($0, RSTART, RLENGTH); match(ZM, /[0-9]+/); print substr(ZM, RSTART, RLENGTH) }

0

Dzięki Kuba za wskazówkę... co prawda Twoje rozwiązanie wyszukuje jedynie pierwsze wystąpienie w danej linii, ale to mnie już naprowadziło - rozwiązałem w pełni swój problem. Tak na prawdę to ma być skrypt, który wyciągnie linki ze strony profilu na plfoto i wypisze linki do zdjęć autora. Oto w pełni działający kod ;)

<font color="darkblue">[wersja poprawiona - poprzednia brała pod uwagę również fotki z nagłówka]</span>

#wyciąga i przerabia linki do zdjęć z profilu na plfoto.com

BEGIN { print "<html><body>" }

OFS = ""
{if ($0 ~ /uzytkownik.php?authorname.+<A HREF="zdjecie.php?picture=[0-9]+">/)
{do
{match($0, /<A HREF="zdjecie.php?picture=[0-9]+">/)
ZM = substr($0, RSTART, RLENGTH)
match (ZM, /[0-9]+/)
ZM = substr(ZM, RSTART, RLENGTH)
print "<a href="http://www.plfoto.com/zdjecia/", ZM, ".jpg">", ZM, ".jpg</a><br>"
$0 = gensub(/(<A HREF="zdjecie.php?picture=[0-9]+">)/, "", 1)
match($0, /<A HREF="zdjecie.php?picture=[0-9]+">/)
}while(RSTART)
}
}

END { print "</body></html>" }

1 użytkowników online, w tym zalogowanych: 0, gości: 1