Summary: This post shares some Unix/Linux sed
command swap/replace examples, where you replace one string or regular expression with another string.
Here's the source code for a sed script that I used to convert some poorly formatted HTML into a format that I preferred. I ran this on a set of almost 30 JSP files from an open source project I recently worked on. The good news is that the previous format of the files was consistent, so I was able to use this sed script to convert all the files at once.
Most of the reformatting lines in the sed script have comments describing what they do, so I won't get into any other detail here. Here is the sed script:
# convert tabs to two spaces s/ / /g # delete leading whitespace (spaces, tabs) from front of each line # aligns all text flush left s/^[ ]*// # add a newline s?<p>\*?\ <p>\*? # put table tag on newline s?<table?\ <table? # get rid of newline? s/<tr>*\n/<tr>/ s/<tr>/ <tr>/ # put </tr> on a newline s?<\/tr>?\ </tr>? # put <td> on a newline s/<td>/\ <td>/g s/<td /\ <td /g # put leading spaces before closing td tag s?^</td? </td? # put on a newline s?<h:selectOneListbox?\ <h:selectOneListbox? s?^<h:selectManyCheckbox? <h:selectManyCheckbox? #s?<h:message? <h:message? # get rid of those pesky colons s?:</td?</td? s?: (? (? # add leading spaces s?<f:? <f:? s?</h? </h? s?^[ ]*<f:view?<f:view? s?^<h:commandButton? <h:commandButton? s?^<input? <input? s?^[ ]*</html>?</html>? s?[ ]*</h3>?</h3>? # add the class tag s?^ <tr>\n <td>? <tr>\ <td class="data_label">?
Some of those sed commands are a little advanced, but I hope you'll be able to figure out what they do. If not, try following this link to the sed man page, or look at some of the other sed posts I have out here.
The shell script I used to run the sed script
I used a Bourne shell script to run my sed script. I used the shell script to help me run these sed commands against every JSP file (*.jsp) in the current directory, converting the HTML of each file. Here's the shell script I used:
#!/bin/sh for i in `ls *.jsp` do echo "Editing $i ..." sed -f pp.sed < $i > $i.tmp mv $i.tmp $i done
I've described this shell script in another blog post, so just follow that link to learn more about how it works.