Batting first, Sri Lanka managed only 225 in 49.3 overs. Rabada finished with 3 for 50 while Imran Tahir, in his final ODI in South Africa, took 2 for 33. Pacer Anrich Nortje took 2 for 35.
South Africa were 135 for 2 in 28 overs with Markram and Rassie van der Dussen (28*) in the middle when bad light stopped play. Technicians tried to fix the floodlight in vain, after which South Africa were awarded the match as they were 41 runs ahead by DLS method.
The hosts lost Quinton de Kock early for just six in the third over, but Markram and Faf du Plessis (24) added 70 for the second wicket to ensure Sri Lanka wouldn't fight back. Markram carried on after his captain fell to take South Africa home.
Sri Lanka lost their openers in single digit scores and never recovered as South Africa kept striking regularly. Five batsmen scored more than 20 but only one converted the start into a half-century.
In the end, Kusal Mendis's 56 and a useful lower order partnership lifted Sri Lanka to a respectable total.
Mendis made 56 before Priyamal Perera and Isuru Udana and 61 off 53 balls for the eighth wicket to take sri Lanka over 220.
Sri Lanka yet again fell three balls short of batting out a full 50 overs, continuing a sequence going back to October 2018.
Mendis played a measured innings in making his second half-century of a series before he was run out after a mix-up with Priyamal Perera in the 35th over. Mendis faced 84 balls and hit three fours.
Udana, who had made 78 in the previous game, scored 32 off 29 balls before he and Priyamal Perera fell off successive deliveries from Kagiso Rabada in the penultimate over.
aiden markramIsuru Udanakagiso rabadakusal mendisPriyamal PereraSouth AfricaSouth Africa vs Sri Lanka 2019sri lanka
First Published: March 17, 2019, 1:02 AM IST