Removing newlines (\n) with sed

Posted on Tuesday, 24th June, 2008 in Life

Today I had to search again on how to remove newline special characters with sed. Thanks to Kamil over at linux.dsplabs.com.au, I found it again rather quickly.

Now, this is just for my own safekeeping, so I don’t end up googling for it again … *shrug*

1
echo -e "Line containing \nnewlines!" | sed ':a;N;$!ba;s/\n//g'

Praise teh sed

Posted on Sunday, 5th August, 2007 in Gentoo, Life

Since my talk with Robin on Thursday regarding the autogenerated userinfo.xml, I finally found some time today to get all the info’s I need out of userinfo.xml.

Since I don’t really want to manually enter all those mail addresses from userinfo into LDAP manually, I figured sed might be my best friend. *BUT* sed ain’t easy .. But thanks to Fabian and Gilles, I learned something new about sed today ..

Basically I searched for a way to transform userinfo.xml into a datafile for ldapedit.

As most of you know, userinfo.xml would look like this:

  <user username="phreak">
    <realname fullname="Christian Heim">
      <firstname>Christian</firstname>
      <familyname>Heim</familyname>
    </realname>
    <pgpkey>0x9A9F68E6</pgpkey>
    <email role="gentoo">phreak@gentoo.org</email>
    <joined>06 August 2005</joined>
    <birthday></birthday>
    <roles>vserver, openvz, kernel</roles>
    <location longitude="13.032" latitude="54.251">Germany, Stralsund</location>
  </user>

So the first step would be to simply use egrep on userinfo.xml to filter only the things I needed ..

celsius roll-call [0] $ egrep "(username=|<email |</user>)" \
userinfo.xml

That looks more like a processable list to me. Now I only needed to convert the into dn, the into mail and be done with it.

This is what I applied on top of the above filter:

celsius roll-call [0] $ egrep "(username=|<email |</user>)" \
userinfo.xml | \
 sed -e "s,.*<user username=\",dn: uid=," \
     -e "s,\">$,\,ou=devs\,dc=gentoo\,dc=org\nadd: mail," \
     -e 's,.*<email role="\\(gentoo\\|primary\\)">,mail: ,' \
     -e "s,</email>,," -e "s,  </user>,,"

And that’s it, I just need to check the dn’s for all the users, and when I’m done with that, finito!