Pacer Marco Jansen stole the show with a seven-wicket haul to bundle out Sri Lanka for 42 on Day 2 of the first Test in Durban on Thursday.
South Africa's left-arm pacer Jansen claimed career-best figures of 7/13 in 6.5 overs to bowl out Sri Lanka for their lowest Test score, with the last six wickets falling for 10 runs.
Gerald Coetzee claimed 2/8 and Kagiso Rabada picked one as the visitors suffered a shocking collapse on the second day. Kamindu Mendis (13) and Lahiru Kumara (10 not out) were the only two Sri Lankan batters to score in double digits as five of their batters fell for ducks as their first innings lasted just 13.5 overs.
Rabada got the first breakthrough when he got Sri Lanka opener Dimuth Karunaratne caught in the slips for 2. Pathum Nissanka (3) also perished early as he edged Jansen to Tristan Stubbs at third slip.
The left-armer struck again in his next over when he bowled Dinesh Chandimal for a duck before getting Angelo Mathews caught at first slip for one.
Coetzee struck in his second over when he had Kamindu Mendis caught at first slip for 13 while Dhananjaya de Silva was bowled by Jansen off an inside edge for seven and he dismissed Prabhat Jayasuriya in the same over.
Earlier, captain Temba Bavuma top-scored with 70 runs as South Africa were bowled out for 191 at lunch.
Bavuma, back in the side after missing the two-Test series victory in Bangladesh last month with an elbow injury, overcame a shaky start to be 28 overnight, then showed both patience and resilience on the second day to go to his 50 off 93 balls.
But left with the tailenders, he went on the attack and, after some lusty boundaries, perished near the end of the innings.
South Africa had resumed on 80/4 after rain limited play on the first day to only one session, and it took only 16 balls on Thursday for their first wicket of the second day to fall when Kyle Verreynne was trapped leg before wicket without adding to his score of nine.
Wiaan Mulder then retired hurt with a single run after facing seven balls, having been hit on a finger by a rising ball from Lahiru Kumara, but returned as the last batsman and finished nine not out.
Spinner Prabath Jayasuriya took two quick wickets with Marco Jansen lbw for 13 before Gerald Coetzee was caught in the outfield by a diving Kamindu Mendes, unable to resist the temptation of trying to hit the bowler out of the ground but not connecting properly.
Keshav Maharaj briefly took to the bowlers and scored a quick 24 off 35 balls to add some potentially vital runs to the home tally, but was always living dangerously and holed out to mid-off when Vishwa Fernando was brought back into the attack.
When Bavuma became the ninth wicket to fall, with the score on 165, the session was extended and the last wicket partnership added 26 runs before Kagiso Rabada was caught for 15 to end the innings.
Asitha Fernando and Lahiru Kumara took three wickets each on a pitch always expected to assist the seamers as Sri Lanka's decision to put their hosts into bat paid off.
South Africa and Sri Lanka are both chasing victory in the two-test series to keep on course for a place in next June’s World Test Championship final at Lord’s.