How to remove all BAM read groups from all reads (not just the header)? I have problem with one my BAMs---it appears to have invalid read groups. 

Normally when I have such a problem, I remove all the read groups from the BAM header as follows:

samtools view -H your.bam | grep -v "^@RG" | samtools reheader - original.bam &gt; new.bam


and then I would execute AddOrReplaceReadGroups from Picard:

http://broadinstitute.github.io/picard/command-line-overview.html#AddOrReplaceReadGroups

I have tried this, and there must still be reads with a read group in the optional tags RG:Z:. 

How to do I definitively remove all read groups from a BAM, including all of the reads?
You might have to manually strip those auxiliary tags off:

samtools view -h your.bam | grep -v "^@RG" | sed "s/\tRG:Z:[^\t]*//" | samtools view -bo your_fixed.bam -


The sed bit is searching for the aux tag and removing everything up to the next tab.