Suche string, dann suche nächsten String und ersetze?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
mistersixt
Beiträge: 6601
Registriert: 24.09.2003 14:33:25
Lizenz eigener Beiträge: GNU Free Documentation License

Suche string, dann suche nächsten String und ersetze?

Beitrag von mistersixt » 17.10.2014 16:25:12

Moin moin,

ich suche einen schönen one-liner in sed oder awk der Folgendes macht:

Er sucht per regular Expression einen String in einem File. Bei einem match gehe n Zeilen weiter im File und suche/ersetze dort einen anderen String. n ist fest vorgegeben, sagen wir 9.

Jemand eine Idee?

Gruss, Jörg.
--
System: Debian Bookworm, 6.11.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 3.8 Ghz., Radeon RX 5700 XT, 32 GB Ram, XFCE

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Suche string, dann suche nächsten String und ersetze?

Beitrag von newdeb » 17.10.2014 18:48:06

Code: Alles auswählen

sed  '/R1/{n;n;n;n;n;n;n;n;n;s/R2/S/}' daten
awk '/R1/{l=NR};{if (l>0 && NR==l+9)sub(/R2/,"S");print}' daten
R1, R2 sind RegEx-Pattern, S der Ersatzstring.

Benutzeravatar
Meillo
Moderator
Beiträge: 9237
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Suche string, dann suche nächsten String und ersetze?

Beitrag von Meillo » 19.10.2014 10:12:49

mistersixt hat geschrieben: ich suche einen schönen one-liner in sed oder awk der Folgendes macht:

Er sucht per regular Expression einen String in einem File. Bei einem match gehe n Zeilen weiter im File und suche/ersetze dort einen anderen String. n ist fest vorgegeben, sagen wir 9.
Zwar kein One-Liner, aber ein schoener Einsatz fuer ed:

Code: Alles auswählen

ed - file <<!
/foo/+9s/bar/quux/
w
q
!
Oder auch so, als 1,5-Zeiler:

Code: Alles auswählen

echo '/foo/+9s/bar/quux/
w' | ed - file
Use ed once in a while!

Benutzeravatar
mistersixt
Beiträge: 6601
Registriert: 24.09.2003 14:33:25
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Suche string, dann suche nächsten String und ersetze?

Beitrag von mistersixt » 20.10.2014 10:57:19

Prima, danke schön ;) !

Gruss, mistersixt.
--
System: Debian Bookworm, 6.11.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 3.8 Ghz., Radeon RX 5700 XT, 32 GB Ram, XFCE

Antworten