Having lost to England and drawn their washed out game against New Zealand, Australia were already up against it before today's day-night clash against their Group A rivals in south London.
Only a comprehensive win would have seen the Australians through, but Sri Lanka posted a score of 253 after an excellent batting performance from Mahela Jayawardene, who passed 11,000 ODI runs with an unbeaten 84.
New Zealand's far superior run-rate meant Australia had to reach their target in 29.1 overs to progress.
Despite swashbuckling innings from Adam Voges (49) and Glenn Maxwell (32), Australia, again with captain Michael Clarke missing, failed to score the required eight runs an over and they were eventually dismissed for 233 despite a 41-run last-wicket stand between Xavier Doherty and Clint McKay.
The result means Australia, beset by off-the-field troubles following David Warner's punch on Joe Root, exit the Champions Trophy without a competitive win in England ahead of the Ashes.
Sri Lanka, meanwhile, progress at the expense of Clarke's side and New Zealand to set up a semi-final against India in Cardiff while England will face South Africa at the Oval on Wednesday after topping Group A.
Shane Watson and Phil Hughes smashed Shaminda Eranga for four in the opening over as Australia started their reply with a bang this evening, but the former Australia captain fell the following over when Nuwan Kulasekara bowled him for five.
Hughes and Glenn Maxwell stepped on the accelerator to briefly move the run-rate up to 10 per over, but Hughes (13) was dismissed with the score on 41 after cutting straight in to the gloves of Kumar Sangakkara off Kulasekara.
Maxwell showed great skill and ingenuity to find yet more boundaries, but he totally mis-read a slower ball from Laitha Malinga and the ball struck leg stump.
George Bailey (four) was run out after a mix-up with Voges Matthews bowled out Mitchell Marsh to leave the Australians floundering on 80 for five after 14 overs.
Australia needed a vast improvement in the run-rate and Matthew Wade and Voges responded well. Both players exploited the often wayward bowling of Malinga to add 47 before Wade sent a thick edge over Sangakkara in to the hands of Tillakaratne Dilshan after scoring 31 off 24 balls.
Australia realised any chance of winning the game inside 29.1 overs had gone when James Faulkner (17) and Mitchell Johnson (four) fell cheaply to leave the score at 168 for eight.
McKay and Voges lowered the run-rate and started playing more straight as Australia looked to secure an unlikely victory inside 50 overs, but Voges' patience ran out.
He tried to loft Ranganga Herath over the long-off boundary to bring up his half century but instead he found Shaminda Eranga.
McKay and Doherty needed 62 to win, but they seemed unfazed, calmly keeping the score ticking over.
McKay moved past his career-best ODI score of 28 to set Sri Lankan nerves jangling, but Dilshan removed the Australian no.10 with a superb catch off his own bowling with seven and half overs left.
Earlier in the day Australia removed Kusai Perera (four) and Kumar Sangakkara (three) before Dilshan (34) edged Doherty to a diving Watson with the score on 92.
Lahiru Thirimanne's well-built innings of 57 came to an end in the 32nd over, then Faulkner clipped Matthews' off stump to leave Sri Lanka 159 for five with 13 overs left, but Jayawardene's presence at the other end kept the score ticking over nicely.
Things got heated in the dying stages, with Jayawardene exchanging barbs with Australia stumper Wade, but the veteran batsman maintained his concentration to steer Sri Lanka past 250 that ultimately proved to be enough to see Matthews' team through.