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