If you're using LDAP, you've probably run into an annoying feature of the
LDAP standard: all LDIF-compliant output shall be wrapped at 80 characters
or less. The LDAP standards explicitly specify how wrapping shall take
place, but the column width varies from one program to another.
Some implementations of ldapsearch(1) accept the "-T" option to turn off
wrapping, or "-r 0" to specify wrapping at column #infinity. OpenLDAP's
version, however, does not accept any such option.
There's an easily-discoverable (i.e. googleable) way to remove the
peculiar line wrapping, by running
ldapsearch [all the various options] | perl -p00e 's/\r?\n //g'
which works equally well under Windows or under UNIX.
Since I hate typing in a command like that over and over, I thought to use
a shell alias to make my life easier. Shell aliases, as I discovered, do
not permit parameter substitution. So, when I tried this:
alias lds='ldapsearch "$@" | perl -p00e "s/\r?\n //g"'
it didn't work. The solution is to use a shell function, and this is now
what's in my .bashrc (I removed the \r? which took care of DOS EOLs, since
I'm not running DOS here):
lds() { ldapsearch "$@" | perl -p0e 's/\n //g' }
In perl 5.8.8, at least (which ships with RHEL/CentOS 5.6), the default
option to '-0' is \000, so specifying -00 is redundant. And possibly
incomplete anyway, since it's supposed to be octal (3 digits). I hated
the thought of exec'ing perl just to do this, but it turns out there's no
way to do it with sh, sed, awk, or tr because we're manipulating newline
characters. Oh, well, perl's been in production use since ~1992, it
should be stable by now.
Note: yes, it is probably *possible* to do it in shell or awk by
specifying a replacement IFS, something like:
lds() { ldapsearch "$@" | read -d '\0' X; echo ${X/\n /g}; }
but it didn't work for me after about 15 minutes of fiddling and testing.
On the other hand, even bash doesn't like single variables exceeding about
32KB, and some LDIF output can be huge. At least with perl you can
process LDIF output up to the size of your remaining VM (eventually).
There are specialized binary stream editors (like bbe-) that might be more
efficient but those aren't typically already installed.
Some people post junk like this to their blog; I'm old-school, I figure a
mailing list that Google indexes is good enough for me :-D.
-Adam Thompson
athompso(a)athompso.net