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