Solução "definitiva", um script que chamei de lsdef:
http://bash.pastebin.com/f633c24c7
Exemplo:
$ lsdef +c -du `find -type f -a -not -name \*~*` >full.tmp
$ lsdef -i `find -type f -a -not -name \*~*` | sort -u | grep -vf full.tmp
PWRDECODER
...
__CONSOLE__
__WIN32__
__unix__
E assim eu posso c
Na verdade eu quero limpar tudo, exceto o nome das macros. Mas com
sua ajuda eu consegui avançar:
$ sed 's/\\\n//' <" | sed
's/# *if[a-z]*\> *\|defined\|[^A-Za-z_0-9]\+ *\|\<[0-9]\+\>/ /g;s/^
\+\| \+$//;s/ \+/\n/g'
> #if defined( XXX ) && (defined( YYY ) || !defined( ZZZ ) || ZZZ ==
123)
> #if def