Err... that does involve the use of temporary files, it's just hidden from you. I'm not aware of any way around that unless the replacement text happen to be exactly the same length (in bytes) as the original text, in which case you need to use dd(1) with skip= and/or seek= to avoid creating a temporary file. Even sed(1) and/or perl(1) with "-i" will create a temporary file behind the scenes, since there's no magic syscall (nor a physical way) to _slide_ the bits forwards or backwards on the disk!
If you're going for ultimate portability, I recommend you fall back to ed(1), since that can be used either as-is with ed(1) or with patch(1). The command-line invocation will be slightly uglier than than with ex(1), however.
-Adam Thompson athompso@athompso.net (204) 291-7950 - direct (204) 489-6515 - fax
-----Original Message----- From: roundtable-bounces@muug.mb.ca [mailto:roundtable- bounces@muug.mb.ca] On Behalf Of Sean Cody Sent: Monday, July 30, 2012 10:38 PM To: Continuation of Round Table discussion Subject: Re: [RndTbl] Little script puzzle help.
The solution (at least on OS X and OpenBSD... will try tomorrow on target OS): sudo ex -c '23,56d|23r ~/replacement.txt|wq' $someconfigfile
I didn't know/remember the ed & patch connection... very cool/interesting, thanks!
The elegance of this solution is... 1 process is created, file is modified _in place_ and doesn't involve temporary files.
-- Sean