Mark J. Reed writes:
FWIW, I use this script to undo the line-folding of LDIF. Just pipe the output of slapcat or ldapsearch or whatever through it and you'll get something that's no longer RFC-compliant LDIF but is more amenable to processing with text-based tools. (..snip..)
This one-liner is sufficient to undo the line folding:
perl -p00e 's/\r?\n //g'
For people _reading_ an LDIF, remember you may need further decoding: The LDIF may contain "attrtype:: base64-encoded value" or "attrtype:< URL of value".
Refolding is a one-liner, something like this:
perl -pe 's/^(.{76})(..*)$/$1\n $2/'
The LDIF RFC doesn't require that, but it doens't hurt either.
However your snippet fails if you need to fold into more than 2 lines. Also you should avoid folding in the middle of an UTF-8 sequence.
#!/usr/bin/perl -wp # Fold LDIF lines > 76 chars (Note, not an LDIF requirement)
# Match {71 to 76} chars 1st time, then {70 to 75} since we prepended a space # Accept either CRLF or LF as line endings. But always folds with just LF. # Avoid splitting in the middle of an UTF-8 char, i.e. before [\200-\277]. s/\G ((?: \A[^\r\n] | (?!\A)) [^\r\n]{70,75}) (?=[^\r\n\200-\277]) /$1\n /gx;