Vernon Philander, Kagiso Rabada, Wayne Parnell and Duane Olivier combined to take 16 wickets on day three as the visitors were completely outplayed.
In the end, South Africa won the match by an innings and 118 runs after bowling the visitors out for 177 in their second innings.
The Proteas had earlier ripped through the Sri Lankan order to dismiss them for 131 in their first innings before skipper Faf du Plessis had no hesitation in enforcing the follow-on.
Sri Lanka were looking to be more positive in their second innings, but the all-seam South African attack blew them away once more.
Only opener Dimuth Karunaratne (50) had offered any resistance in the second innings.
Having started the day on 80/4 in their first dig, Sri Lanka lost their next six wickets in the opening session for just 51 runs.
While Rabada and Philander picked up two wickets each on Friday, Saturday’s opening session saw the success shared between the four quicks.
Philander was first to strike when he had Dinesh Chandimal (5) caught behind by Quinton de Kock.
Rabada then picked up his third when he had Sri Lanka’s captain, Angelo Mathews, also pouched by De Kock behind the stumps for 19.
Debutant Duanne Olivier had bowled well without a wicket on Friday, but he did not have to wait long to get his Test tally up and running on Saturday.
With just his second ball of the day he had a pulling Rangana Herath (8) caught by Stephen Cook at backward square leg with a well directed bouncer.
Wayne Parnell then got in on the action when he had Suranga Lakmal (4) well caught by Rabada at mid-off after the lanky Sri Lankan fast bowler went on the drive.
Olivier had his second when the resilient Upul Tharanga was caught by Dean Elgar at slip for 24 before Parnell wrapped things up, taking a good catch off his own bowling to get rid of Nuwan Pradeep for 4.
Rabada then had Kaushal Silva (0) out with his first ball of the second innings.
The Proteas picked up a further five wickets in the middle session.
Kusal Mendis (24) chopped on a delivery from Parnell before Dhananjaya de Silva (10) was caught by Du Plessis in the slips off Olivier.
The highlight of the second session came when Du Plessis, at second slip, pulled off a simply spectacular catch to remove Mathews (10) to give Olivier his second of the innings and fourth of the match.
Philander then got on the board, taking his first wicket of the second innings as Dinesh Chandimal (10) nicked off to Hashim Amla.
Rabada then clean bowled Karunaratne just before tea with a stunner that left Sri Lanka out on their feet.
The Proteas went into the final session needing four wickets and they did not disappoint.
Parnell struck soon after the restart when he had Herath (10) caught by Bavuma before a superb running catch from JP Duminy gave Parnell his third of the innings when Upul Tharanga (26) was out having a hack.
Olivier then bounced out Lahiru Kumara (0), who has caught by Cook at short-leg, before Parnell wrapped up a comprehensive win when Lakmal was caught on the square leg boundary.
Scores in brief
SA 426 (Duminy 155, Amla 134, Pradeep 4/78, Kumara 4/107)
Sri Lanka 131 (Mendis 41, Philander 3/28, Rabada 3/44, Olivier 2/19, Parnell 2/38) and 177 (Karunaratne 50, Olivier 3/38, Parnell 4/51, Rabada 2/50, Philander 1/35)
South Africa won by an innings and 118 runs. (Courtesy Sports 24)