Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 Mar 2021 13:58:03 -0700
From:      Gary Aitken <freebsd@dreamchaser.org>
To:        FreeBSD Mailing List <freebsd-questions@freebsd.org>
Subject:   sed -i empty argument compatibility issue
Message-ID:  <9178f6c5-631a-c2c2-c6b1-8def94a3397b@dreamchaser.org>

next in thread | raw e-mail | index | archive | help
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?

Gary



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?9178f6c5-631a-c2c2-c6b1-8def94a3397b>