Nuwan Kulasekara hit the winning runs as Sri Lanka reached 283 for seven off 49.2 overs in reply to Australia’s 280 for six off 50 overs.
Peter Forrest hit the first century of the tri-series with 104 in Australia’s innings, but it wasn’t enough as man-of-the-match Mahela Jayawardene (85) and Dinesh Chandimal (80) kept Sri Lanka ahead in the run chase.
The Australians looked as if they might fight back for a win with three wickets in the last five overs but Thisara Perera (21 not out) and Kulasekara (4 not out) got Sri Lanka home with some lusty hitting.
The win takes Sri Lanka to the top of the triangular tournament on 15 points, one ahead of Australia, with India slipping four points behind the host nation.
India face a must-win game against Australia in Sydney on Sunday.