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>