Wainwright allowed three hits and struck out six before he was lifted after 68 pitches, with 44 strikes.
Miami threatened in the first inning, but was unable to cash in. The Marlins put runners on the corners after Juan Pierre's infield single and Donovan Solano's single to right, but Rob Brantly struck out and Austin Kearns tapped into a 6-4-3 double play.
After Solano's single, Wainwright retired eight straight until Solano doubled to lead off the fourth inning.
Solano was 2-for-3, and he's batting .545 on the spring.
Marlins right-hander Jacob Turner was making his second Grapefruit League start. Both have been against the Cardinals. The first outing was troubling, as he gave up six runs in one-third of an inning.
Between appearances, Turner threw in a B game, and his velocity topped at 91 mph. On Saturday, the 21-year-old was in better command of everything. Throwing with more urgency, his fastball topped at 94 mph. For the most part, he pounded the zone, throwing 49 pitches, with 30 strikes.
In three scoreless innings, Turner scattered two hits and one walk. He struck out two -- both against David Freese.
"Obviously, I felt a lot better," Turner said. "I think it showed in just the command of the pitches and how sharp they were. It was a step in the right direction."
Up next: The Marlins travel to Lake Buena Vista, Fla., on Sunday to take on the Braves at 1:05 p.m. ET. Wade LeBlanc, competing for the fifth-starter spot, gets the nod. The lefty has thrown five scoreless innings this Grapefruit League season, with six strikeouts and one hit allowed. Atlanta is starting Tim Hudson.
Joe Frisaro is a reporter for MLB.com. He writes a blog, called The Fish Pond. Follow him on Twitter @JoeFrisaro. This story was not subject to the approval of Major League Baseball or its clubs.