Cross-platform compatible sed command?

Viewed 303

I'm trying to use sed, but I want to run properly both under Linux and Mac. Currently, I have something like this:

if test -f ${GENESISFILE};
then
    echo "Replacing ..."
    sed -i '' "s/ADDRESS/${ADDRESS}/g" ${GENESISFILE}
else
    echo "No such file"
fi

Now, the point is that using -i '' part it runs properly under Mac, but doesn't under Linux, and if I remove it then it doesn't work under Mac. What's proper way to make it cross-platform compatible?

1 Answers

Instead of sed one-liner:

sed -i '' "s/ADDRESS/${ADDRESS}/g" ${GENESISFILE}

use this cross-platform Perl one-liner, which runs OK on both Linux and macOS:

perl -i.bak -pe 's/ADDRESS/$ENV{ADDRESS}/g' ${GENESISFILE}

The Perl one-liner uses these command line flags:
-e : Tells Perl to look for code in-line, instead of in a file.
-p : Loop over the input one line at a time, assigning it to $_ by default. Add print $_ after each loop iteration.
-i.bak : Edit input files in-place (overwrite the input file). Before overwriting, save a backup copy of the original file by appending to its name the extension .bak. Use -i alone, without .bak, to skip making the backup.

SEE ALSO:
perldoc perlrun: how to execute the Perl interpreter: command line switches

Related