Sed gives: sed: can't read : No such file or directory
Solution 1:
(Compiling an answer from comments, the know-how is by melpomene and AlexP.)
What is that ''
after sed -i
?
-i
means in-place, that is, edit in the file directly.-i ''
means edit in place a file whose name is the empty string.
Since there probably is no file whose name is the empty string, sed complains that it cannot read it.
Note 1 platform dependency:
The syntax of -i
is one difference between GNU sed and sed from mac os.
Note 2 "usual" order of arguments:
The -e
switch to indicate the sed code allows having it in between file names.
This is a trap (in which I for example got caught embarassingly), by making you trip over your expectations of what you find where in an sed command line.
It allowssed -i filename -e "expression" AnotherFileName
which is an unintentionally camouflaged version ofsed -i'NoExtensionGiven' "expression" filename AnotherFileName
.
Solution 2:
For support on both OSX and Linux, I use a simple if check to see if the bash script is running on OSX or Linux, and adjust the command's -i
argument based on that.
if [[ "$OSTYPE" == "darwin"* ]]; then
sed -i '' -e 's|$iconPath|images-theme-dark/$iconfile|g' "{}"
else
sed -i -e 's|$iconPath|images-theme-dark/$iconfile|g' "{}"
fi
Solution 3:
In my bash scripts I use something like that (to support both MacOS and Linux distributions):
SEDOPTION=
if [[ "$OSTYPE" == "darwin"* ]]; then
SEDOPTION="-i ''"
fi
sed $SEDOPTION "/^*/d" ./file