(G)AWK Zamiana

0

Muszę napisać program zmieniający końcówki -ing na -ed
to moje wypociny

np: Dane wejściowe

I'm living here.
What are you doing?

{gsub(/ing/,"ed");print}

jednakże zmienia mi nie tylko końcówki czasowników tylko każde wystąpienie "ing", jak zrobić, aby zmieniał tylko koniec słówka

0

Nie znam za dobrze awk, ale w ogolnie w wyrazeniach w sed, grep itp. robi sie to np za pomoca \b. Np. twoj problem w sed:

echo -e 'liked wanted edited\ned edmonton edwin accredit' | sed -e 's|\Bed\b|ing|g'

\B oznacz ze przed 'ed' nie moze byc word breaka, natomiast \b oznacza ze pe 'ed' ma byc break. awk powinien to rowniez wspierac.

Ups, moj przyklad robi odwrotnosc tego, co chciales - ale poradzisz sobie z zamiana ;d

0

nie działa jak powinno ;/ jak dam {gsub(/\Bing\b/,"ed");print}
to nie widzi tego \b 0_o

0

Ale czemu ciągle próbujesz zrobić to AWKiem skoro sed się bardziej do tego nadaje.

0

w tym sęk, że ma być w awk ;] chodzi o działanie na wyrażeniach regularnych

1

Hmm, to dość interesujące:

echo "oneing twoingx ingthree" | gawk "{gsub(/ing\B/,\"ED\");print}"
"oneing twoEDx EDthree"

echo "oneing twoingx ingthree" | gawk "{gsub(/ing\b/,\"ED\");print}"
"oneing twoingx ingthree"

[edited]
http://www.regular-expressions.info/tcl.html
echo "oneing twoingx ingthree" | gawk "{gsub(/ing\y/,\"ED\");print}"
"oneED twoingx ingthree"

czyli \y zamiast \b - no cóż.. ave standardy

0

elegancko ;] wszystko działa ;]

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