South Africa's fast bowlers came to the rescue after a batting collapse to deliver a 113-run win in the second one-day international on Wednesday.
The victory gave the home team a 2-0 lead in the five-match series, but the result wasn't on the cards after South Africa lost their last six wickets for 21 runs to fall to a mediocre total of 251 all out batting first. The South Africans were dismissed with nearly five overs of their 50 left unused at SuperSport Park.
South Africa's quicks ran through Sri Lanka in response, though, with Kagiso Rabada taking 3-43, Lungi Ngidi 2-14 and newcomer Anrich Nortje 2-25. Sri Lanka was bowled out for 138 in the 33rd over.
Those three fast bowlers combined to reduce Sri Lanka to 116-6 and there was no way back for the tourists after that.
Legspinner Imran Tahir chipped in with 2-39 and there was a late appearance by Dale Steyn, who joined the game as a substitute fielder and took a simple catch at point to dismiss last man Lasith Malinga and end the match.
South Africa was on course for a 300-plus score after being put in to bat. Opener Quinton de Kock hammered 94 off just 70 balls with 17 fours and a six. Captain Faf du Plessis made 57 to follow his century in the first game.
But du Plessis' dismissal, bowled by Thisara Perera in the 37th over, sparked the South African collapse.
The Proteas went from 220-4 to 251 all out, with Perera finishing with 3-26 and Malinga and Dhananjaya de Silva taking two wickets each.
Rabada cranked up the pace and struck first in the third over when Niroshan Dickwella couldn't deal with a fast, short delivery and looped a top edge to wicketkeeper de Kock. He picked up another two down the order.
In his debut series, Nortje contributed two wickets and also a run-out, when he hit the stumps with his throw from third-man to remove Kusal Mendis for 24. He also had top-scorer Oshada Fernando put lbw next over as Sri Lanka fell to 92-5.