Eovaldi, who will be Miami's No. 2 starter, threw 83 pitches and did not walk a batter while striking out two.
St. Louis' Lance Lynn, in line to pitch the third game, gave up three runs in 5 2/3 innings with five strikeouts.
"Better," Lynn said when asked to assess his outing. "That's all you hope for at this time as you move toward the season. You want to feel better with the ball coming out of your hand. My breaking stuff felt a lot better today, which is something that we've been working on. From that point of things, it was good."
Marlins lefty Dan Jennings walked three and allowed a run-scoring single by Pete Kozma in the ninth and later threw a wild pitch, helping Shane Robinson score and allowing the Cardinals to even the score at 5-5. But a Chris Coghlan single in the bottom of the ninth gave Miami the win.
A back-and-forth game swung in the Marlins' favor in the sixth inning. St. Louis rallied with two runs off Eovaldi, who gave up five singles in the inning. Daniel Descalso singled and scored on Yadier Molina's RBI hit to right, and Matt Adams' single to left put the Cardinals in front, 3-2.
Lynn then recorded two quick outs before surrendering a single to Chris Valaika. After 94 pitches, Lynn's day was done.
Lefty Randy Choate entered to face left-handed hitting Kyle Skipworth, who drew a walk. Fernando Salas relieved Choate and walked Gorkys Hernandez. Austin Nola, a Minor Leaguer brought up for the day to add depth on the bench, delivered a pinch-hit RBI single to right. A second, and go-ahead, run scored when right fielder Oscar Taveras bobbled the ball.
Of Miami's three runs off Lynn, two were driven in by Hernandez, who did not have a hit until the eighth.
In the fourth, Hernandez gave the Marlins a 2-1 lead on a sacrifice fly to right field. Lynn put himself in a jam by hitting Austin Kearns and Coghlan with pitches to open the inning.
With one out, Hernandez lifted a fly ball deep enough to score Kearns without a play.
Hernandez got his hit, and another RBI, in the eighth when he drove in a run off Cardinals' reliever Mitchell Boggs, who is expected to fill in for an injured Jason Motte at closer.
St. Louis struck quickly, posting a run in the first inning.
St. Louis scored three batters into the game on Matt Holliday's RBI double. Descalso, who singled up the middle to open the game, raced home from first on Holliday's drive to left-center.
The Marlins tied it at one in the second, when Coghlan singled and scored on Hernandez's RBI groundout to second.
The defense of Adeiny Hechavarria saved a run for Miami in the top of the fourth. With Molina on second, Adams ripped a hard grounder that the Marlins' shortstop snared while sliding up the middle. His throw to first recorded the out, and Eovaldi retired Ty Wigginton on a grounder to third to get out of the inning.
Up next: The Cardinals and Mets will meet three times over the next six days, beginning with a 12:05 p.m. CT game at Roger Dean Stadium on Sunday, available on MLB.TV. Jake Westbrook will make his fifth start of the spring for St. Louis, which will slot him into the fourth spot in the rotation once the season starts. Westbrook allowed two runs in six innings his last time out. New York will send starter Aaron Laffey to the mound.