Add a newline after each XML tag

0

My xml file looks like this:

<price = "2.22"><instock = "1">

I need to have it like that:

<price = "2.22">
<instock = "1">

After each ">" character I need to put a newline character with awk or sed. How can i accomplish that? thank you

metin sober

Posted 2010-09-20T13:01:51.830

Reputation: 1

I'm not sure <price = "2.22"> is valid XML. – user1686 – 2010-09-20T17:19:33.230

Answers

2

As KeithB said, there are potential problems that can arise from using a crude approach. However, this crude approach is a tiny bit more selective so that chances it will fail are reduced by about 0.00001% which may be enough.

sed 's|><|>\n<|g' inputfile

If there may be whitespace between the angle brackets, then this may be better:

sed 's|>[[:space:]]*<|>\n<|g' inputfile

which will eliminate that whitespace.

Paused until further notice.

Posted 2010-09-20T13:01:51.830

Reputation: 86 075

1

If you want to do this right, you need something more powerful than awk. One of the problems is awk won't handle > inside strings or comments. You might be better off with perl or python. If this is just to make a file easier to look at visually, it might be fine.

A quick and dirty awk script is

 awk '{for(i=1; i<= NF-1; i++) printf "%s>\n",$i}' FS='>'

This treats > as the separator between fields, and prints out each on its own line. Its pretty crude, but might be a starting place.

KeithB

Posted 2010-09-20T13:01:51.830

Reputation: 8 506