Australia piled on the pressure from the first over, with McGrath, fast-improving Shaun Tait (4-39) and Nathan Bracken testing the batsmen with a probing line and length during their near-flawless opening spells.
At one stage, South Africa, who won the toss and chose to bat, were 27-5.
The formidable trio shared eight wickets to boost Australia's chances of advancing to the final for the fourth successive time. They were the winners in 1999 in England and 2003 in South Africa.
McGrath, playing in his last World Cup, became the tournament's highest wicket-taker with 25 in 10 matches, surpassing Sri Lankan off-spinner Muttiah Muralitharan (23).
What was billed as a keen contest soon turned into a one-sided affair as the South African batsmen struggled against an inspired Australian pace attack.
Justin Kemp (49 not out) and Herschelle Gibbs (39) alone offered some resistance, helping their team add 122 runs for the last five wickets. But their team still crashed to their lowest Cup total.
Gibbs fell to a soft dismissal, caught behind off Tait while trying to run down the ball to third-man.
The middle-order batsman put on 60 for the sixth wicket with Kemp, the highest stand in a spineless South African batting performance. Kemp hit a six off Shane Watson and four boundaries.
Gibbs, keen to make amends for a dropped catch that allowed Steve Waugh off the hook at the 1999 tournament, hit six fours in his 49-ball knock.
South Africa's hopes of making the final for the first time since their maiden Cup appearance in 1992 suffered a setback in the opening 10 overs of hostile pace when they were reduced to a pathetic 27-5.
Their last Cup semi-final against Australia ended in a thrilling tie in England in 1999, but this time they just failed to raise their performance.
The procession of men back to the pavilion began with in-form skipper Graeme Smith, who tried an ambitious shot early in the innings. He took a few steps out of the crease, but failed to connect and saw his off-stump knocked back by a Bracken delivery.
It was again a poor shot-selection that led to the dismissal of key batsman Jacques Kallis, who was bowled while attempting to steer on bent knees a fuller-length delivery from McGrath.
The Australian fast bowler was on a hat-trick in his fifth over when he had Ashwell Prince caught by wicket-keeper Adam Gilchrist, and Mark Boucher by Matthew Hayden at first slip.
Tait then dismissed Gibbs, Andrew Hall and Andre Nel to ensure his team chased an easy target.
The winners will face Sri Lanka in Saturday's final in Barbados.
South Africa 149 all out in 43.5 overs (Kemp 49 n o, Gibbs 39; Tait 4 for 39, McGrath 3 for 18, Bracken 1 for 15) Vs Australia (yet to bat).