Date: Mon, 08 Mar 2021 12:26:05 -0800 From: Chris <bsd-lists@bsdforge.com> To: Ed Maste <emaste@freebsd.org> Cc: FreeBSD Hackers <freebsd-hackers@freebsd.org>, FreeBSD Current <freebsd-current@freebsd.org> Subject: Re: Rationalizing sed -i/-I (in-place editing) argument handling Message-ID: <0aa81e9d7124b144443da405d9ba5d43@bsdforge.com> In-Reply-To: <CAPyFy2DJcNsDd0tmfyuumDkxXoBDYDmNTqGL8VOsMjk3cr2=3A@mail.gmail.com> References: <CAPyFy2DJcNsDd0tmfyuumDkxXoBDYDmNTqGL8VOsMjk3cr2=3A@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On 2021-03-08 12:13, Ed Maste wrote: > A relatively minor but longstanding incompatibility between FreeBSD > and many other systems is the way sed handles backup files for > in-place editing -- sed's -I and -i options. GNU sed and other BSDs > accept an optional argument: -I.bak will save a backup file with a > .bak extension, and -I with no argument will not create a backup file. > FreeBSD currently accepts either -I.bak or -I .bak to save a backup > with the given extension, and -I "" (an empty argument) to specify no > backup. > > I've been tripped up by this in the past and I know many others have. > Most recently tobik@ filed PR 254091 for this. Now, I think a single > change to make -i/-I to be compatible with other sed implementations > in one step is too much of a POLA violation, but I think it can > reasonably be done in stages: > > 1. Update the man page to indicate that -i/-I should not have a space > between the flag and the extension. This is compatible with current > FreeBSD sed, other BSDs sed, GNU sed, and my proposed changes below. > No backup is still a special case and remains as -I "". > > I've opened https://reviews.freebsd.org/D29128 with proposed man page > changes. > > 2. Continue accepting -I .bak, but emit a warning suggesting the use > of -I.bak instead. > > 3. Change -I/-i to getopt optional arguments, but keep a special case > for -I/-i "". At this point -I .bak becomes invalid as with other > seds, and specifying no backup can be done with either -I "" or -I > with no argument. This relies on an empty argument having no other > sensible interpretation. > > 4. Continue accepting -I "" to specify no backup, but emit a warning > suggesting the use of -I with no argument. > > 5. Retire the special case for -I "". > > These steps could be done over an extended period of time (such as one > major release to another) - this is most important between steps 2 and > 3. > > Please let me know what you think, and if there's something I've missed. +1 This seems more than a reasonable course of action. :-) Thanks!
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?0aa81e9d7124b144443da405d9ba5d43>