sed -i empty argument compatibility issue

Kyle Evans kevans at freebsd.org
Sat Mar 6 04:39:51 UTC 2021


On Fri, Mar 5, 2021 at 3:03 PM Gary Aitken <freebsd at dreamchaser.org> wrote:
>
> I'm trying to come up with a fix for a script in a port which invokes sed.
> The port comes from a linux environment, and the offending line looks like this:
> (This is in a cMake file.)
>
> COMMAND sed -i "/^# /d" "${outfile}"
>
> The issue is that linux sed expects the -I or -i extension modifier to
> immediately follow the -i.  In the above line, the extension is deliberately
> missing to provide in-place editing.
>
> fbsd expects the extension to be separated from the -i by whitespace, or
> doesn't work properly when it is empty or immediately follows the -i:
>
> $ !ls
> ls -lt temp.tmp*
> -rw-------  1 garya  garya  86 Mar  5 13:15 temp.tmp
> -rw-------  1 garya  garya  86 Mar  5 13:15 temp.tmp_org
> $ sed -ifoo "/^# /d" temp.tmp  (works on both fbsd & linux))
> $ !ls
> ls -lt temp.tmp*
> -rw-------  1 garya  garya  30 Mar  5 13:48 temp.tmp
> -rw-------  1 garya  garya  86 Mar  5 13:15 temp.tmp_org
> -rw-------  1 garya  garya  86 Mar  5 13:15 temp.tmpfoo
> $ cp -p temp.tmp_org temp.tmp
> $ sed -i"" "/^# /d" temp.tmp   (works on linux but not fbsd)
> sed: 1: "temp.tmp": undefined label 'emp.tmp'
> $ sed -i "" "/^# /d" temp.tmp  (works on fbsd but not linux)
> $ !ls
> ls -lt temp.tmp*
> -rw-------  1 garya  garya  30 Mar  5 13:49 temp.tmp
> -rw-------  1 garya  garya  86 Mar  5 13:15 temp.tmp_org
> -rw-------  1 garya  garya  86 Mar  5 13:15 temp.tmpfoo
>
> So fbsd works with '-i ""' but linux requires '-i""'
>
> Does anyone know a work-around for this problem?
>

My personal favorite trick to bridge the gap here was, as I recall:

sed -i'' '' 's/../.../' ${file}

IIRC those sed's with an optional backup suffix (Linux, OpenBSD) will
accept the immediately following empty string and accept the next
empty word as an empty command, while our getopt will effectively
ignore the rest of the -i word and use the following optarg as usual.


More information about the freebsd-questions mailing list