/usr/bin/perl5 -p -e 'BEGIN { print qq|$(HASH_LINE) 1 ""\n|; } \ if (/^#(?:line)?\s*[0-9]+/) \ { s)\Q"$(PREPROCNAME)")"$(ORIGNAME)"); s@//@/@g; }' \ '$<' > '$@' It's that ugly.