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>
