The hosts restricted the 2009 champions to 123 for 7. They will now either play Australia or West Indies in the final.
Colombo: Spinners Rangana Herath and Ajantha Mendis shared five wickets as Sri Lanka defeated Pakistan by 16 runs on Thursday to reach the World Twenty20 final.
Herath picked up 3 for 25 with his leftarm spin and Mendis took 2 for 27 in restricting Pakistan to 123 for 7 after Sri Lanka posted 139 for 4 in their semifinal.
It was sweet revenge for Mahela Jayawardene's team, three years after Pakistan won the title at Lord's by defeating Sri Lanka in the final.
Mohammad Hafeez top-scored with 42 but Herath had the Pakistan captain stumped in the 15th over before bowling dangerman Shahid Afridi off the next delivery to take the game away from Pakistan. The other semifinal is between Australia and West Indies on Friday.
Pakistan made a confident start to their run-chase when Imran Nazir (20) added 31 runs off 30 balls with Hafeez before Mendis broke up the threatening stand.
The ball rolled back onto Nazir's stumps as he tried to play a defensive stroke on a wicket which assisted both spinners and seamers and was difficult for strokeplayers to hit boundaries.
Pakistan's inform batsman Nasir Jamshed, who has scored two half centuries in the tournament, pushed the total to 55 before he was unlucky to be adjudged leg before wicket by Australian umpire Rod Tucker.
Television replays clearly showed that Angelo Mathews had pitched the ball outside leg stump, but Tucker thought otherwise.
Two balls later, Mathews struck again when Kamran Akmal misjudged a slower delivery and spooned the ball to Jayawardene at short midwicket.
Sri Lanka had their fielding lapses when Hafeez was twice dropped on 7 and 24 with the second one a sitter missed at long on by Lasith Malinga.
However, Herath proved Jayawardene's decision right to leave out offspinner Akila Dananjaya when he had Shoaib Malik clean bowled off a straight delivery and then struck two decisive blows.
He first had Hafeez stumped and then clean bowled Afridi off a ball that took the inside edge onto the wickets. It left too much for Umar Akmal (29 not out) and the tailenders to handle.
With Pakistan needing 39 off the last four overs, Malinga conceded just 11 in his two overs while Mendis bowled a superb 19th over for just four runs and had Sohail Tanvir (13) stumped.
Earlier, Jayawardene hit 42 off 36 balls and added 63 runs for the opening wicket with Tillakaratne Dilshan (35) to make sure Sri Lanka did not lose early wickets on a wicket friendlier for bowlers.
Pakistan seamers and spinners never allowed Sri Lanka to score freely after Jayawardene won the toss and elected to bat.
Seamer Tanvir, who replaced Abdul Razzaq in the playing eleven, gave away only 11 runs in his three-over spell but was unlucky not to get a wicket as he beat both Jayawardene and Dilshan with his outswingers.
Jayawardene hit couple of impressive reverse swept boundaries off spinners before he mistimed a scoop off Afridi (1 for 28) and was caught at short fine leg in the 11th over.
Kumar Sangakkara (18) twice hit ace offspinner Saeed Ajmal for boundaries on the offside in one over but was brilliantly caught by Malik at long on off Hafeez as the wicket looked less conducive for strokeplay.
Dilshan struggled to up the scoring rate and was trapped lbw by Umar Gul (1 for 26) in the 18th over after playing a subdued knock off 43 balls with just three fours.
Thisara Perera (11) and Angelo Mathews (10) hit three boundaries in the last over — bowled by Gul — which in the end gave host enough runs to defend and qualify for their second World Twenty20 final.