The Indian bowlers did a neat job, skittling out Sri Lanka for a meagre 213 in 46.1 overs before their batting colleagues took over, guiding the team to 214 for two for a facile win that came with 17.2 overs to spare.
Gautam Gambhir (71 off 86 balls) and Dinesh Karthik (48 off 40 balls) gave India a flying start before Virat Kohli came up with a breezy unbeaten 71 off just 68 balls to complete the formality. Irrespective of the outcome of their final group match against Bangladesh tomorrow, India will meet Sri Lanka in Wednesday's final.
Kohli notched up his fifth half century in his 18th ODI, which he made with the help of nine fours while Gambhir, who was dropped twice – on 41 and 43 – smashed his 19th ODI fifty in his 94th match.
With this win, India, who played today without key players Virender Sehwag, Harbhajan Singh and Ashish Nehra, have won two matches out of three while Sri Lanka ended their league engagements with three wins out of four.
India have collected nine points, with a bonus point for reaching the target in less overs in today's match.
The victory by Mahendra Singh Dhoni's men has also rendered inconsequential their final match against Bangladesh tomorrow. Incidentally, India and Sri Lanka were playing their 120th ODI against each other today, the same as between Australia and the West Indies. When the two sides meet in the final of the tri-series on January 13 they will create a new record of having played most matches in ODI history between themselves.
With the wicket at the Sher-e-Bangla National Stadium easing out, openers Gambhir and Karthik, who came in for Sehwag, made a flying start raising 89 runs for the first wicket, virtually taking the game away from Sri Lankans' reach.
The duo were aggressive from the very beginning hitting a flurry of boundaries with exquisite timing and were also not afraid of taking risks with a couple of edges flying past fielders for fours. Karthik, who was playing for the first time in the tournament, played some delightful shots all with perfect timing and was the more aggressive of the two, hitting Thilan Thushara for three fours in the eighth over.
He was unlucky not to have got his half century and was out in the 12th over getting an outside edge of a Thushara delivery for Kumar Sangakkara to do the rest.
Gambhir ensured that India did not have any hiccups though the run chase slowed down a bit after the initial flourish.
Gambhir, who hit 10 fours in his 86-ball innings with five coming from pacer Suranga Lakmal's bowling, was out in the 29th over holing out to Chanaka Welegedara off Thissara Perera but by then India needed barely 50 runs and Virat Kohli and Yuvraj Singh (8 not out) took India home.
Kohli hit a flurry of boundaries off Lakmal towards the home stretch of run chase before Yuvraj scored the winning run – a single – to reach 214 for two in 32.4 overs.
For Sri Lanka, Thilan Thushara and Thissara Perera took one wicket each. Lakmal was the most expensive bleeding 75 from his 10 overs.
Earlier deciding to bat first, Sri Lanka managed 213 before folding in the 47th over. For them, captain Kumar Sangakkara top-scored with a 78-ball 68 while rookie Suraj Randiv, who made his debut in the ODI series against India last month, contributed with a valuable 76-ball 56, his maiden half century.
The seventh wicket partnership of 59 runs off 70 balls between Sangakkara and Randiv and the 69-run stand between Thilan Thushara and Randiv for the eighth wicket from 83 balls were mainly responsible for the Sri Lankan score.
Back in the side after missing the last two matches with a groin injury, Tillakaratne Dilshan struck a brisk 17-ball 33 before Zaheer Khan, adjudged Man of the Match for his three for 38, ended his onslaught.