India 193 for 2 (Dhawan 78, Kohli 76*) beat South Africa 191 (De Kock 53, Bhuvneshwar 2-23, Bumah 2-28) by x wickets
Scorecard and ball-by-ball details

Faf du Plessis scored 36 in the quarter-final of the 2011 World Cup. He scored 36 again in the virtual quarter-final of the 2017 Champions Trophy. On both those occasions, he was involved in the run-out of AB de Villiers. On both occasions the run-out proved to be the moment the match went away from them. Du Plessis went on to run David Miller out as well, and South Africa contrived to lose eight wickets for 51 runs from 140 for 2 in the 29th over.

It will be all the more heartbreaking for South Africa that on a used pitch, slower than the ones The Oval has laid out, 275 might have turned out to be a pretty competitive total, but chasing 192, India could take their time when South Africa asked questions of them, and then Shikhar Dhawan and Virat Kohli sealed their semi-final spot in style.

India didn't need to indulge in the mind games that New Zealand resorted to six years ago; they were just excellent with their defensive bowling in the first half, took the run-outs on offer, and then circled in for the kill with aggressive bowling changes. A measure of their discipline was how Quinton de Kock scored just five runs out of 53 square or behind square on the off side; one of them was a reverse sweep. India fell short of being magical in the field, but they showed they were not to be pushed around, reaching six run-outs, the highest in this tournament.

Kohli was relieved when he won the toss and passed the onus of how hard to go in the middle overs when setting a target to South Africa. The ball refused to swing or seam once again, but India still thrived by bowling to contain. Bhuvneshwar Kumar and Jasprit Bumrah cramped de Kock up, giving him nothing outside off. Bhuvneshwar even brought the third man up to afford a deep point, which resulted in the batsman's failed attempts to drag the ball to leg from just outside off. Hashim Amla struggled to time the ball, which was a sign the pitch was slow, and there was a need to recalibrate their total.

By the time Amla walked across and took a risk to hit Hardik Pandya for a six - his first boundary in 25 balls - India had kept South Africa down to 52 in 14 overs. There were hardly any bad balls. Three of those 14 overs were bowled by R Ashwin, coming back into the side ahead of Umesh Yadav. Ashwin got Amla when he went back to hit a fullish ball square instead of hitting cover. MS Dhoni accepted the thick deflection coolly.

Du Plessis made a fluent start to his innings, scoring off each of the first seven deliveries he faced. The energy rubbed on to de Kock, who showed remarkable patience in not playing low-percentage cricket. The run-rate gradually went up from 3.5 in 10 overs to 4.7 in 20 to 4.83 in 24. De Kock reached 50 for the sixth time against India - his previous five had been hundreds - and South Africa were back on course. Then Ravindra Jadeja, fresh from an ordinary game against Sri Lanka, began his fifth over. The room outside off remained elusive, and finally the low-percentage sweep arrived, claiming de Kock.

De Villiers and du Plessis started promisingly, adding 24 off 23 without breaking a sweat. Then du Plessis hit to point, and de Villiers, coming off a hamstring niggle, didn't shout no. The call here was the non-striker's, de Villiers was well within his rights to send du Plessis back, but he didn't. The big dive in the end did nothing for him.

In the next over, du Plessis got a ball to the left of Jasprit Bumrah, India's weakest fielder, at short third man. Du Plessis set off for the run, then stopped, then set off again, and by now David Miller just responded. Suddenly, though, du Plessis made a U-turn and beat Miller to the striker's end. Bumrah's throw was bad, but that worked in India's favour as they completed an easy run-out at the non-striker's.

Du Plessis was on 27 off 31 when de Villiers was run out. He managed nine off the next 18 before chopping Pandya on in a manner identical to his dismissal against Pakistan. India could have easily set into template and bowled their spinners out. However, they bowled spin at one end and actively looked for wickets at the other. And the wickets arrived: Chris Morris and Andile Phehlukwayo to Bumrah, and Kagiso Rabada and Morne Morkel to successive Bhuvneshwar deliveries.

Just to sum up how dysfunctional South Africa had been, last man in Imran Tahir was run-out too, not clear enough in his mind that it was his job to give the strike to JP Duminy, who was left unbeaten on 20. South Africa were bowled out with 33 balls unused.

Run-outs seemed contagious as India got off the mark with a suicidal run. Miller missed the stumps, and Dhawan batted on. Rohit Sharma played a rare loose shot early in the innings to bring Kohli out in the sixth over. A string of 17 dots followed as Rabada and Morkel found some spongy bounce from the slow pitch. South Africa packed the region behind square with two slips and a gully for Kohli. A bigger chase might have brought about a big shot but Kohli just dropped one wide of cover and went to the other end. Dhawan took charge of the chase, and as is his habit, Kohli remained not out at the end.

Sidharth Monga is an assistant editor at ESPNcricinfo