England, with wicketkeeper Tim Ambrose on 16 and Andrew Flintoff on nine, still need 137 runs to make South Africa bat again.
South Africa, made 522 in reply to England's first innings 203, after the first match in the four-match series ended in a draw at Lord's.
The post-lunch session featured Ian Bell's dismissal when his square cut to a short and wide delivery was brilliantly caught by AB de Villiers in the gully, clutching the ball one-handed after diving to his right.
After an animated celebration he gestured, in good nature, to the crowd who had booed him when he went out to bat on Saturday, after he claimed a catch that was shown to have been grounded the day before. Bell departed for four.
Top scorer Alastair Cook was caught off a leading edge by Hashim Amla at cover from the bowling of Jacques Kallis for 60 after batting for almost five hours.
Before lunch, nightwatchman James Anderson defied the South Africa bowlers despite some painful blows to the body from Dale Steyn to make a Test best 34.
South Africa attempted to unsettle Anderson in the 45th over of the innings, bowled by Steyn. The second ball struck Anderson between the arm guard and glove on his facing right arm and he required immediate medical attention to check there was no damage.
After a five-minute delay, Steyn bowled Anderson another spiteful short ball that crashed into the grill of his helmet in front of his right cheekbone.
Anderson fell to the ground instantly and an 11-minute delay separated the third and fourth balls of the over to demonstrate the seriousness of the blow. He was eventually trapped lbw in front of middle stump and received a standing ovation for his 111-minute resistance that spanned 80 deliveries.
Kevin Pietersen lasted five balls for his 13 in a frustrating cameo. He glanced and off-drove Steyn for boundaries with his first two balls, took a single with his third, square drove Jacques Kallis with his fourth and finally edged to wicketkeeper Mark Boucher.