Unix iMac shell terminal
sed -i 's/original/new/g' maths.tx
Message returned: sed: -i may not be used with stdin
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It only takes a minute to sign up.
Sign up to join this communityMacs use the BSD version of utilities such as sed
and date
, which have their own idiosyncrasies.
In this specific case, the BSD build of sed
mandates the extension for the backup file with -i
, rather than it being optional, as in GNU sed
.
As such:
sed -i .bak 's/needle/pin/g' haystack
The shown command will replace all instances of needle
with pin
in the file haystack
, and the original file will be preserved in haystack.bak
.
From the manual for the implementation of sed
on a Mac:
-i extension Edit files in-place, saving backups with the specified extension. If a zero-length extension is given, no backup will be saved. It is not recommended to give a zero-length extension when in-place editing files, as you risk corruption or partial content in situations where disk space is exhausted, etc.
As opposed to on a Linux host:
-i[SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if SUFFIX supplied)
Note that "a zero-length extension" is distinct from "no extension". You can eschew the backup entirely, then, with:
sed -i '' 's/needle/pin/g' haystack
sed -i.bak ...
(no space, and a dot). This leads to create a backup file. If you don't want it, as you know the filename anyway, it's easy to add a && rm filename.ext.bak
after the sed
. This way works on both sed versions.
sed -i 's/original/new/g' < maths.txt
(note the addition of the less-than sign)