From sebastian-huber@web.de Thu Sep 19 12:48:43 2002 From: Sebastian Huber To: users-de@lists.opensuse.org Subject: Textersetzung ueber mehrere Zeilen Date: Thu, 19 Sep 2002 14:48:55 -0700 Message-ID: <200209191448.55591.sebastian-huber@web.de> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2204162867120208344==" --===============2204162867120208344== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Hallo, ich habe folgendes Problem: irgendein-config-file: # section begin bla bla # section end Ich will nun '^# section begin$.*^#section end$' durch was anderes ersetzen. Kann man z.B. sed beibringen, dass es ueber mehrere Zeilen ersetzt? Man koennte so was auch mit einem sh-Skript erledigen, allerdings sind dann umstaendliche Sicherheitsabfragen notwendig. Es wuerde auch schon reichen, wenn grep oder so was aehnliches Multilineregex verstehen wuerde. Darueber habe ich aber leider nix in der Doku gefunden. SuSE muss diese Problem ja schon geloest haben, weiss vielleicht jemand ein Beispielskript? Ciao --===============2204162867120208344==-- From volker.kroll@4mino.de Thu Sep 19 13:37:00 2002 From: Volker Kroll To: users-de@lists.opensuse.org Subject: Re: Textersetzung ueber mehrere Zeilen Date: Thu, 19 Sep 2002 15:35:44 +0200 Message-ID: <1032442549.17071.5.camel@bevok1> In-Reply-To: <200209191448.55591.sebastian-huber@web.de> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============8917011958552289472==" --===============8917011958552289472== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit On Thu, 2002-09-19 at 23:48, Sebastian Huber wrote: > Hallo, > ich habe folgendes Problem: > irgendein-config-file: > # section begin > bla bla > # section end Da hast Du ja Glück, daß ich gerade dafür gestern einen Einzeiler gemacht habe: perl -e 'undef $/; foreach (@ARGV) { $file = $_; open FILE, $_ ; while () {print "\t\"", $file, "\" => \"" , $1, "\", \n" if /\s*([.,a-zA-Z0-9 -]*)\s*<\/title>/s;}}' FILENAME In Klammern steht das, was Du einfangen willst. <title> war bei mir der Beginn das Ende Das Geheimnis bei der Regex ist der Schalter /s der . auch \n matchen läßt. Mit undef $/ wird verhindert, daß die whileschleife Zeilenweise vorgeht. HTH V. -- Volker Kroll 4mino AG Chief System Developer Chausseestr. 52 b volker.kroll(a)4mino.de D-10115 Berlin Tel.: +49-30-2888490-0 Fax.: +49-30-2888490-99 --===============8917011958552289472==-- From ah@secure-net.de Thu Sep 19 13:39:47 2002 From: Achim Hoffmann To: users-de@lists.opensuse.org Subject: Re: Textersetzung ueber mehrere Zeilen Date: Thu, 19 Sep 2002 15:39:44 +0200 Message-ID: In-Reply-To: <200209191448.55591.sebastian-huber@web.de> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============4793635809251188244==" --===============4793635809251188244== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable perl ist i.A. der bessere Ansatz, aber es geht auch so: awk '/^# section begin/{x++;next}/^# section end/{x--;print "was anders";next= }(x>=3D1){next}{print}' file Achim --===============4793635809251188244==-- From david@dhaller.de Thu Sep 19 17:27:04 2002 From: David Haller To: users-de@lists.opensuse.org Subject: Re: Textersetzung ueber mehrere Zeilen Date: Thu, 19 Sep 2002 15:32:33 +0200 Message-ID: <20020919133233.GA984@feersum.endjinn.de> In-Reply-To: <200209191448.55591.sebastian-huber@web.de> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============6468588934280201211==" --===============6468588934280201211== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Hallo, On Thu, 19 Sep 2002, Sebastian Huber wrote: >Hallo, >ich habe folgendes Problem: >irgendein-config-file: > # section begin > bla bla > # section end > >Ich will nun '^# section begin$.*^#section end$' durch was anderes ersetzen. >Kann man z.B. sed beibringen, dass es ueber mehrere Zeilen ersetzt? Ja natuerlich, dazu dienen die Adressoperatoren von sed: sed '/^# section begin/,/^# section end/c\ fo bla' < alt > neu (zwei(!) Zeilen, mit durch '\' maskierten Zeilenumbruch) Zu 'c' siehe man sed, das steht fuer 'change', der gesamte Adressbereich wird geaendert. Die Adressoperatoren kann man auch fuer fast alle anderen sed-Befehle verwenden, bei manchen Kombinationen macht das allerdings wenig Sinn, z.B: sed -n '1,$p' < datei Man kann auf Adressbereichen durch Blockbildung auch mehrere Befehle ausfuehren, z.B: sed '/^# section begin/,/^# section end/{s/bla/fasel/g;s/blubb/laber/;} -dnh -- Make sure that they know you know that they know you know. -- Mike Andrews on getting license keys by mail (from a certain Corp.) --===============6468588934280201211==--