Opener Kaushal Silva top-scored with 80 and skipper Angelo Mathews made 77, but Sri Lanka lost six wickets for 112 runs after being 191-3 at one stage.
Leg-spinner Yasir Shah claimed five wickets to restrict Sri Lanka's lead to 166 runs runs.
Pakistan lead the three-match series after winning the first Test in Galle by 10 wickets.
Silva spree
Opener Kaushal Silva continued to torment Pakistan's bowlers as he helped Sri Lanka take the lead on the second day of the second Test in Colombo on Friday.
Silva, who hit a century in the first Test at Galle, was unbeaten on 64 as the hosts went to lunch on 147-3 in their first innings in reply to Pakistan's 138.
Skipper Angelo Mathews was the other batsman at the crease on 11, with his team ahead by nine runs and seven wickets in hand on a hard, bouncy pitch at the P. Sara Oval.
Kumar Sangakkara, who resumed on 18 at the team's overnight score of 70-1, moved to 34 when he attempted a big hit off left-arm spinner Zulfiqar Babar and was caught at long-on by Asad Shafiq.
Sangakkara, 37, has still not responded to media speculation he is available for only the first two Tests against Pakistan and one against India in August before retiring.
Leg-spinner Yasir Shah, whose seven-wicket haul in Sri Lanka's second innings fashioned Pakistan's 10-wicket victory in Galle, struck a further blow for the hosts.
Yasir forced Lahiru Thirimanne (seven) to edge a catch to Azhar Ali at short-leg, reducing Sri Lanka to 119-3.
But Silva stayed solid at one end, hitting eight boundaries, to take his team past Pakistan's modest total.
The third and final Test is scheduled to start in Pallekele from July 3.
COMMENTS (1)
Comments are moderated and generally will be posted if they are on-topic and not abusive.
For more information, please see our Comments FAQ