Jasprit Bumrah took two early wickets as India made a fine start against Sri Lanka at Headingley on the final day of the World Cup league phase.
Paceman Bumrah removed openers Dimuth Karunaratne (10) and Kusal Perera (18) inside eight overs after Sri Lanka elected to bat.
Sri Lanka are playing only for pride because they can no longer reach the semi-finals while India can still top the 10-team group if results go their way on Saturday.
Kusal Mendis was stumped off left-arm spinner Ravindra Jadeja, who is playing his first match of the competition, before paceman Hardik Pandya had rising star Avishka Fernando caught behind for 20 as Sri Lanka slipped to 55 for four in the 12th over.
They had reached 102-4 after 25 overs with Angelo Mathews, on 26, and Lahiru Thirimanne, on 22, trying to rebuild the innings.
Sri Lanka laboring at 102-4 after 25 overs
India was in charge at Headingley, where Sri Lanka was laboring at 102-4 halfway through its allotted 50 overs.
Angelo Mathews, 26 not out, and Lahiru Thirimanne, 22 not out, were fighting to restore Sri Lanka to respectability.
They came together at 55-4 in the 12th over.
Opener Dimuth Karunaratne and Kusal Perera edged behind on 10 and 18, respectively, giving fast bowler Jasprit Bumrah his 100th and 101st one-day internationals wickets. He's the second fastest India bowler to 100 wickets, in 57 innings, one more than the rested Mohammed Shami.
Allrounder Ravindra Jadeja, making his first appearance of this World Cup, got Kusal Mendis stumped on 3 in his first over.
Hardik Pandya got the big wicket of Avishka Fernando, the teenage century-maker in the last match. Fernando, on 20 off 21 balls, tried ramping Pandya at the last second, and gave wicketkeeper MS Dhoni his third catch of the match.
Sri Lanka opt to bat against India in World Cup
Sri Lanka skipper Dimuth Karunaratne won the toss and elected to bat first against India at Headingley on Saturday's final day of the World Cup league phase.
The 1996 champions, who are playing for pride after bowing out of the semi-finals race, made one change from their previous win over West Indies, Thisara Perera coming in for Jeffrey Vandersay.
"It was an obvious plan, it's a used wicket and will get slower and slower," Karunaratne said at the toss.
"We didn't capitalise in the first few games, but we then started to correct those mistakes and started to do well."
Virat Kohli's India have won six of their eight league matches to make the semi-finals along with defending champions Australia, hosts England and New Zealand.
The two-time winners have a chance to leapfrog table-topping Australia with a win in Leeds but also need help from South Africa, who face Aaron Finch's side later at Old Trafford.
India made two changes to their starting line-up, with Ravindra Jadeja and Kuldeep Yadav coming in for Mohammed Shami and Yuzvendra Chahal.
"We would have batted first as well, used pitch, will get slower as the match progresses," said Kohli.
"The team is doing well, we are striking a good balance at the right time."
India: Virat Kohli (capt), KL Rahul, Rohit Sharma, Rishabh Pant, MS Dhoni (wkt), Dinesh Karthik, Hardik Pandya, Ravindra Jadeja, Bhuvneshwar Kumar, Kuldeep Yadav, Jasprit Bumrah
Sri Lanka: Dimuth Karunaratne (capt), Kusal Perera (wkt), Avishka Fernando, Kusal Mendis, Thisara Perera, Lahiru Thirimanne, Angelo Mathews, Dhananjaya de Silva, Isuru Udana, Kasun Rajitha, Lasith Malinga
Umpires: Paul Wilson (AUS), Ian Gould (ENG)
TV umpire: Chris Gaffaney (NZL)
Match referee: Chris Broad (ENG)