Ishant Sharma took three wickets as India restricted Sri Lanka to 181 for eight in the second Champions Trophy semi-final in Cardiff on Thursday.
In a repeat of the 2011 World Cup final India won by six wickets in Mumbai, India captain MS Dhoni saw his decision to field first in helpful overcast and humid conditions well supported by his attack.
Sharma took three wickets for 33 runs as India made a strong start to their bid to face hosts England, seven-wicket winners over South Africa at The Oval on Wednesday, in Sunday's final at Edgbaston.
Sri Lanka captain Angelo Mathews battled hard for his top score of 51 in an innings where no other batsman made more than Mahela Jayawardene's 38.
But the fact Mathews took 89 balls for his runs, including just one six and one four, was testament to the grip India's bowlers exerted.
Sri Lanka were six for one when Kusal Perera edged a drive off Bhuvneshwar Kumar and was caught at second slip by Suresh Raina.
They suffered a further setback when Tillakaratne Dilshan, after playing an on-drive, pulled up with what appeared to be a right calf injury.
He received lengthy on-field treatment but, still struggling, he retired hurt an over later on 12.
Dilshan eventually finished on 18 not out after coming back in when his side were 164 for seven.
Kumar and Umesh Yadav produced a series of full length deliveries moving sharply off the pitch that beat both Kumar Sangakkara and fellow left-hander Lahiru Thirimanne.
Sri Lanka declined to 41 for three after both Thirimanne and Sangakkara fell to well-taken second slip catches by Raina off Ishant Sharma.
It was deserved reward for Dhoni's policy of attacking the batsmen with two slips and only two men outside the circle, with India's bowlers at least making a mockery of the suggestion the side would struggle in classic 'English' conditions.
The 23rd over saw Dhoni pass on his wicketkeeping role to Dinesh Karthik, himself a specialist gloveman but played as a batsman this tournament.
That allowed Dhoni, a medium-pacer, to bowl himself in conditions ideally suited to his style
In his 222 previous ODIs Dhoni had bowled just two overs, yet his decision very nearly proved a master-stroke with his second ball Thursday.
Jayawardene, on five, was given out leg before by Pakistani umpire Aleem Dar only for the batsman -- who two years ago became the only man to score a hundred in a losing cause in a World Cup final -- to overturn it on review.
But a partnership of 78 ended when Jayawardene, swiping across the line, was bowled by Jadeja.
Off-spinner Ravichandran Ashwin chipped in with three for 48, including a stumping by Dhoni to dismiss Jeevan Mendis.