我有以下 bash
脚本,它为找到的每个图像重复。它需要遍历所有 html、css 和 js 文件,并替换该文件中所有出现的图像。
for image in app/www/images-theme-dark/*.png
do
echo "installing icon" $image
# extract filename from iconpath
iconfile=$(basename $image)
iconPath="images/"$(basename $image)
# replace paths in all files containing icon paths
find app/www -type f \( -name "*.html" -or -name "*.css" -or -name "*.js" \
-or -name "*.appcache" \) \
-exec sed -i '' -e 's|$iconPath|images-theme-dark/$iconfile|g' "{}" \;
done
但是,当我运行脚本
sed
时,给出:sed: can't read : No such file or directory
在 StackOverflow 上,我找到了 sed: can't read : No such file or directory 但我已经有
{}
附近的报价当我回显
sed
命令并在命令行上手动执行它时,没有错误。我在 Raspbian GNU/Linux 8.0 (jessie) 上使用 GNU sed v4.2.2
有人看到这里有什么问题吗?
最佳答案
(从评论中编译答案,诀窍是 melpomene 和 AlexP。)''
之后的 sed -i
是什么?-i
表示就地,即直接在文件中编辑。-i ''
表示就地编辑名称为空字符串的文件。
由于可能没有名称为空字符串的文件,sed 提示它无法读取它。
注意 1 平台依赖 :-i
的语法是 GNU sed 和来自 mac os 的 sed 之间的一个区别。
注意 2 参数 的“通常”顺序:
指示 sed 代码的 -e
开关允许将其置于文件名之间。
这是一个陷阱(例如,我在其中被尴尬地捕获了),它使您超出对在 sed 命令行中的位置的期望。
它允许sed -i filename -e "expression" AnotherFileName
这是一个无意伪装的版本sed -i'NoExtensionGiven' "expression" filename AnotherFileName
。
关于bash - Sed 给出 : sed: can't read : No such file or directory,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43171648/