Sri Lanka are sensing an historic Test victory over South Africa after mounting a fightback on an astonishing day two that saw 18 wickets tumble at St George's Park.

No Asian team has ever won a Test series in South Africa, but Sri Lanka will achieve that feat on Saturday if they score the 137 runs they require in Port Elizabeth with effectively seven wickets remaining.

The tourists could surely not have envisaged being in such a promising situation when they were skittled out for 154 on Friday, Kagiso Rabada taking 4-38 as the Proteas claimed a first-innings lead of 68.

Sri Lanka, missing their main spinner after Lasith Embuldeniya suffered a dislocated thumb, then forced South Africa to collapse to just 128 despite an unbeaten 50 from captain Faf du Plessis, Suranga Lakmal (4-39) the pick of the bowlers.

That left Dimuth Karunaratne's side chasing 197 to go down in the record books and claim a whitewash, which looks to be very much on the cards after they reached stumps on 60-2 - essentially three down with Embuldeniya unable to bat.

Duanne Olivier took a sharp catch off his own bowling to remove Lahiru Thirimanne in the third over on a day which Sri Lanka started on 60-3 and Rabada got in on the act by bowling Kasun Rajitha with a beauty.

Niroshan Dickwella (42) and Kingsmead hero Kusal Perera (20) went on the attack, but Rabada removed them both and Wiaan Mulder claimed a maiden Test wicket as Sri Lanka folded.

South Africa lost the out-of-sorts Dean Elgar, Aiden Markram and Temba Bavuma cheaply in their second innings, but were still very much on top at 90-3 before capitulating with a whimper.

Hashim Amla moved past Graeme Smith to become his country's second-highest run-scorer in the longest format before Vishwa Fernando had him caught at first slip by Kusal Mendis.

Du Plessis hung in there, but South Africa lost seven wickets for 38 runs, Lakmal getting rid of the dangerous Quinton de Kock caught and bowled and finishing a pitiful innings by trapping Olivier leg before after the impressive Dhananjaya de Silva took 3-36.

Sri Lanka were 34-2 after Thirimanne and Karunaratne nicked behind off Rabada and Olivier respectively, but no further damage was done, and they should fancy their chances of a stunning series win after chasing down over 300 in the first Test.