Search code examples
shellunixsedsolaris

Alternative to `sed -i` on Solaris


On Linux sed -i will modify the input files in place. It doesn't work on Solaris, though.

sed -i '$ s/OLD/NEW/g' test        
sed: illegal option -- i

What can I use in place of sed -i on Solaris?


Solution

  • You'll need to replicate -i's behavior yourself by storing the results in a temp file and then replacing the original file with the temp file. This may seem inelegant but that's all sed -i is doing under the covers.

    sed '$ s/OLD/NEW/g' test > test.tmp && cat test.tmp > test && rm test.tmp
    

    If you care you could make it a bit more robust by using mktemp:

    tmp=$(mktemp test.XXXXXX)
    sed '$ s/OLD/NEW/g' test > "$tmp" && cat "$tmp" > test && rm "$tmp"