The tourists lost two more wickets before tea, heading into the break at 164/4, with Kohli on 84 and Ajinkya Rahane on 12.
With India in early trouble at 24/2 in the morning session, Kohli joined Cheteshwar Pujara in an 89-run stand for the third wicket in a recovery stand.
Pujara was run out, however, by Imran Tahir after Kohli turned back and left him stranded, after contributing a patient 25 runs off 98 deliveries.
Rohit Sharma was removed by Vernon Philander shortly before tea when the pace bowler had him caught behind by AB de Villiers for 14 runs.
For live updates of the first Test follow Wesley Botton on Twitter@TheCitizenSport.