Sri Lanka are through to the semi-finals of the ICC Champions Trophy after defeating Australia by 20 runs in the final Group A fixture at the Oval.