Portál AbcLinuxu, 25. dubna 2024 01:03


Dotaz: viacriadkovy replace v sed (gnuwin32)

1.6.2005 13:47 mireceq
viacriadkovy replace v sed (gnuwin32)
Přečteno: 210×
Odpovědět | Admin
Dobry den, potreboval by som v programe sed nahradit retazec, ktory sa moze nachadzat na viacerych riadkoch. Napriklad retazec:
XXX Hel
lo
world!YYY
potrebujem zmenit na:
XXXAhoj svet!YYY

Vo vime sa to da pomocou s/XXX\_[^>]*YYY/XXXAhoj svet!YYY/g
Problem je, ze sed nepozna \_ (zahrnutie newlinov do lubovolnych znakov)
(V sed-e sa daju vymazat take riadky pomocou /XXX/,/YYY/d)
Viem, v sed-e existuje prikaz N, ale musime dopredu poznat pocet riadkov, na ktorych sa nachadza hladany retazec a to ja neviem. Ako sa teda da pouzit viacriadkovy search&replace v sed-e?
Poznamka: pouzivam gnuwin32 sed, ale v tom asi nie je hacik...
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

1.6.2005 14:02 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: viacriadkovy replace v sed (gnuwin32)
Odpovědět | | Sbalit | Link | Blokovat | Admin
sed '/XXX/{:a;N;s/YYY/YYY/;t b;b a;:b;s/\(XXX\).*\(YYY\)/\1Ahoj svete\2/}'
Ovšem sed už není na tyto věci ideální nástroj.
1.6.2005 14:04 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: viacriadkovy replace v sed (gnuwin32)
Sed v gnuwin32 je předpokládám GNU sed, takže:
sed '/XXX/{:a;N;s/\(XXX\).*\(YYY\)/\1Ahoj\2/;T a}'
1.6.2005 14:12 mireceq
Rozbalit Rozbalit vše Re: viacriadkovy replace v sed (gnuwin32)
Diky moc. (a aky nastroj je idealny? ;)
1.6.2005 14:17 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: viacriadkovy replace v sed (gnuwin32)
Cokoli, co umí víceřádkové regulární výrazy nativně (Perl, Python, ...)/

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.