Skipper AB de Villiers smashed two sixes and a boundary during his 13-ball 30 while Hamshim Amla (16) and Faf du Plessis (13) were the other main run contributors in a total of 78-4 after South Africa were sent in to bat.
Sri Lanka were without their ace spinner Ajantha Mendis, who took 6-8 in their win over Zimbabwe, after suffering from a side strain.
Heavy rain delayed the start by two and a half hours as a sell-out 35,000 crowd waited anxiously for action and although they got it late the fireworks in a shorter game gave them some consolation.
Sri Lanka were never in the hunt, losing star duo Tillakaratne Dilshan (nought) and Mahela Jayawardene (four) in the first two overs.
Dale Steyn was South Africa's best bowler with 2-10. Dilshan Munaweera and Kumar Sangakkara made 13 each.
South Africa, who finished top of the group, and Sri Lanka qualified for the Super Eight rounds. Both had beaten Zimbabwe in their opening matches.
Sri Lanka will be in group one of Super Eights while South Africa will be in group two, regarded as the group of death with India, Australia and Pakistan likely to be the other teams.
South Africa 78-4 in seven overs (AB de Villiers 30), Sri Lanka 46-5 (D. Steyn 2-10)