some kind of binary sed(1) command

Matthias Apitz guru at unixarea.de
Thu Feb 2 08:07:02 UTC 2012


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

> > From owner-freebsd-questions at freebsd.org  Thu Feb  2 00:27:33 2012
> > Date: Thu, 2 Feb 2012 07:22:36 +0100
> > From: Matthias Apitz <guru at unixarea.de>
> > To: freebsd-questions at 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 at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe at freebsd.org"

-- 
Matthias Apitz
t +49-89-61308 351 - f +49-89-61308 399 - m +49-170-4527211
e <guru at 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!
-------------- next part --------------
#!/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/
           }  
           }'  


More information about the freebsd-questions mailing list