Following on from my previous blog about sed, this blog will detail how I use sed most often: manipulating test data when running demonstrations of new features. Let’s say we’ve developed a web service which creates users from the following XML document:

XML
1
2
3
4
<user>
    <username>USERNAME</username>
    <password>PASSWORD</password>
</user>
<user>
    <username>USERNAME</username>
    <password>PASSWORD</password>
</user>

We might want to demonstrate this web service using a number of combinations of usernames and passwords, for instance:

  • robearl/password
  • rob_earl/pass_word
  • rob’earl/pass’word
  • rob-earl/pass-word
  • etc.

To do these tests we might create four XML documents containing each username/password pair. Every different combination we wanted to demonstrate would require a new document.

Instead, we can use sed. Create a single document like the one above and pass it through sed to replace the variables before passing it to the web service using curl:

Bash
1
cat single_document.xml | sed -e 's/USERNAME/robearl/' -e 's/PASSWORD/password/' | curl <options> -d @- <web service>
cat single_document.xml | sed -e 's/USERNAME/robearl/' -e 's/PASSWORD/password/' | curl <options> -d @- <web service>

Using this technique, we avoid having to create lots of XML documents and it’s obvious what data is being passed without having to open up each document during the demonstration.