India captain MS Dhoni won the toss and put Sri Lanka in to bat, but they could only muster 181-8 from their 50 overs.
India reached their target of 182 comfortably, with Shikar Dhawan top-scoring with 68 off 92 balls.
Sri Lanka struggled to get going and Kusal Perera (4) became the first man to go after edging to Suresh Raina off the bowling of Bhuvneshwar Kumar. They suffered another blow soon after when Tillakaratne Dilshan retired hurt with a calf problem.
Thisara Perera (0) and Ajantha Mendis (25) were dismissed by Ashwin and Ishant Sharma respectively, with Nuwan Kulasekara (1) and Lasith Malinga (7) remaining at the crease as the innings came to an end.
Sri Lanka struggled to make an impact with the ball as India's opening partnership of Rohit Sharma and Dhawan put on 77 for the first wicket, before the former was bowled out by Mathews.
Dhawan remained at the crease until being stumped by Kumar Sangakkara to make the score 142-2. Virat Kohli (58) and Raina (7) knocked off the remaining runs to seal India's progress into the final.
They will face England at Edgbaston on Sunday.