At 2008-07-20T02:45:51+02:00, Roland Smith wrote:

> Insert a newline in front of every < :
>
> gsed -e "s/</\n</g" <infile >outfile
>
> Note that this requires GNU sed. It won't work with BSD sed.

It is possible with native `sed' if the newline character in the
replacement string is properly escaped: two backslashes, followed by
Ctrl-V, and then the newline.

[/home/raghu]% which sed
/usr/bin/sed

[/home/raghu]% echo '<hello>world</hello><hello>next world</hello>' | sed 
's/</\\
</g'

<hello>world
</hello>
<hello>next world
</hello>

However, this doesn't do what the OP wanted: "world", etc., must
appear on separate lines.  Here is a second approximation:

[/home/raghu]% cat foo.sed
s/</\
</g
s/>/>\
/g

[/home/raghu]% cat foo.html
<hi><hello>world</hello>between hells...<hello>next world</hello></hi>

[/home/raghu]% sed -f foo.sed foo.html | sed '/^$/d'
<hi>
<hello>
world
</hello>
between hells...
<hello>
next world
</hello>
</hi>

Perhaps the pipe to remove blank lines can be incorporated into
`foo.sed', but I don't know how.

Raghavendra.

-- 
N. Raghavendra <[EMAIL PROTECTED]> | http://www.retrotexts.net/
Harish-Chandra Research Institute   | http://www.mri.ernet.in/
See message headers for contact and OpenPGP information.

_______________________________________________
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to