Captain Temba Bavuma top-scored with 70 for South Africa. The only other home batsman to top 20 was Keshav Maharaj, batting at number 10, who made a quick 24.
Opening bowlers Asitha Fernando and Vishwa Fernando took three and two wickets respectively but the major damage was done by fast bowler Lahiru Kumara, whose figures of three for 70 did not do justice to an aggressive performance.
Kumara made the first breakthrough on Thursday, trapping Kyle Verreynne leg before wicket for nine after South Africa added just three runs to their overnight total of 80 for four.
Kumara also forced all-rounder Wiaan Mulder to retire hurt with an injured right middle finger – although Mulder returned at the fall of the ninth wicket to help Kagiso Rabada add 26 for the last wicket.
In contrast to Wednesday when rain restricted play to 20.4 overs, there was bright sunshine on Thursday with a strong breeze blowing across the ground.
Brief scores:
South Africa, first innings, 191 all out in 49.4 overs (T. Bavuma 70; A. Fernando 3-44, V Fernando 2-35, L. Kumara 3-70, P. Jayasuriya 2-24)
Toss: Sri Lanka