Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 2 Feb 2012 09:06:56 +0100
From:      Matthias Apitz <guru@unixarea.de>
To:        Robert Bonomi <bonomi@mail.r-bonomi.com>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: some kind of binary sed(1) command
Message-ID:  <20120202080656.GA7403@sh4-5.1blu.de>
In-Reply-To: <201202020751.q127puMO011247@mail.r-bonomi.com>
References:  <20120202062236.GA3419@tinyCurrent> <201202020751.q127puMO011247@mail.r-bonomi.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--DocE+STaALJfprDB
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

El día Thursday, February 02, 2012 a las 01:51:56AM -0600, Robert Bonomi escribió:

> > From owner-freebsd-questions@freebsd.org  Thu Feb  2 00:27:33 2012
> > Date: Thu, 2 Feb 2012 07:22:36 +0100
> > From: Matthias Apitz <guru@unixarea.de>
> > To: freebsd-questions@freebsd.org
> > Subject: some kind of binary sed(1) command
> >
> >
> > Hello,
> >
> > I have a normal ASCII file wich has in some places two lines of '*',
> > separated by an empty line, i.e.
> >
> > ....\n
> > *********************\n
> > \n
> > *********************\n
> > ....\n
> >
> > and I want to substitute the \n between the star lines by \f; the
> > 'binary' sed command would just be 
> >
> >     s/*****\n\n*****/*****\n\f*****/
> >
> > which ofc does not work with sed(1) because it is line oriented;
> > I could write something in perl, C, awk or whatever language, but I
> > would prefer to do it with the normal commands... any ideas?
> 
> <lightbulb mode="on">
> Use sed.  
> </lightbulb>
> 
> *GRIN*

Thanks, but the attached script (based on your content and saved to a
script file) just gives:

$ sh sed
sed: 5: " t l
           :l
     ...": invalid command code /


Leaving your original mail as well here; Thanks again

	matthias

> 
> 
> 
> 
> 
> As follows:
> 
>   sed -e ' t l
>            :l
>            /^[*]+$/ {
>            N
>            !/\n$/ { 
>            P
>            s/^.*\n//
>            t l
>            }
>            /\n$/ {
>            N
>            !/\n\n[*]*$/ {
>            P
>            s/^.*\n//
>            P
>            s/^.*\n//
>            t l
>            }
>            /\n\n[*]*$/ s/\n\n/\n\f/
>            }  
>            }'  
> 
> Note: "how" this incantation works is left as an excercise for the student. 
>       Careful perusal of the FM will provide enlightenment.
> 
> Caveat: this will convert:
>    {stars}
>    {blank}
>    {stars}
>    {blank}
>    {stars}
> 
> to;
>    {stars}
>    {formfeed}
>    {stars}
>    {blank}
>    {stars}
> 
> not:
>    {stars}
>    {formfeed}
>    {stars}
>    {formfeed}
>    {stars}
> _______________________________________________
> freebsd-questions@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe@freebsd.org"

-- 
Matthias Apitz
t +49-89-61308 351 - f +49-89-61308 399 - m +49-170-4527211
e <guru@unixarea.de> - w http://www.unixarea.de/
¡Ya basta! ¡Imperialistas occidentales, quitad las manos de Libia!
There's an end of it! Imperialists occidentals, hands off Libya!
Schluss jetzt endlich! Imperialisten des Westens, Haende weg von Libyen!

--DocE+STaALJfprDB
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename=sed

#!/bin/sh

  sed -e ' t l
           :l
           /^[*]+$/ {
           N
           !/\n$/ { 
           P
           s/^.*\n//
           t l
           }
           /\n$/ {
           N
           !/\n\n[*]*$/ {
           P
           s/^.*\n//
           P
           s/^.*\n//
           t l
           }
           /\n\n[*]*$/ s/\n\n/\n\f/
           }  
           }'  

--DocE+STaALJfprDB--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120202080656.GA7403>