Sri Lanka were dismissed for 205 after winning the toss on the opening day of the second Test against India in Nagpur on Friday.
Ravichandran Ashwin took four wickets while fellow spinner Ravindra Jadeja and paceman Ishant Sharma picked three each. The tourists lost six wickets in the final session.
Skipper Dinesh Chandimal top-scored with 57 while opener Dimuth Karunaratne made a gritty 51.
Sri Lanka struggle despite Karunaratne fifty
Opener Dimuth Karunaratne hit a gritty half-century as Sri Lanka struggled against India's persistent bowling on the opening day of the second Test on Friday.
Paceman Ishant Sharma took two wickets including Karunaratne for 51 to hurt the visitors, who opted to bat first on a green Nagpur pitch.
Sri Lanka were 151-4 at tea with skipper Dinesh Chandimal, on 47, and wicketkeeper-batsman Niroshan Dickwella, on 18, at the crease.
Chandimal was involved in a crucial, 62-run fourth-wicket stand with Karunaratne as the visitors attempted to steady the innings after losing three early wickets.
The left-handed Karunaratne, who hit six boundaries in his 147-ball stay, went on to register his 14th Test fifty before being trapped lbw by Sharma.
They were hard-earned runs for the left-handed Karunaratne, who got two reprieves on 17 and 21 in testing conditions.
Ravindra Jadeja, who had got Karunaratne stumped on a no ball before lunch, was also rewarded for his persistence after trapping Angelo Mathews lbw for 10.
Earlier, the visitors lost opener Sadeera Samarawickrama for 13 and Lahiru Thirimanne for nine to take lunch at 47-2 after a tough morning session.
The two teams are fighting to go ahead in the three-Test series after the opening game ended in a draw at Kolkata's Eden Gardens.