Bash Sed给出:Sed:can';t read:没有这样的文件或目录
我有下面的Bash Sed给出:Sed:can';t read:没有这样的文件或目录,bash,sed,quoting,gnu-sed,Bash,Sed,Quoting,Gnu Sed,我有下面的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="i
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:无法读取:没有这样的文件或目录
在StackOverflow上,我找到了,但是我已经在{}
当我回显sed
命令并在命令行上手动执行它时,没有错误
我在Raspbian GNU/Linux 8.0上使用GNU sed v4.2.2(jessie)
有人知道这里可能有什么问题吗?(根据评论编写答案,诀窍由melpomene和AlexP提供。)
在sed-i之后的'
是什么
-i
表示就地,即直接在文件中编辑。-i'
表示就地编辑名称为空字符串的文件。由于可能没有名称为空字符串的文件,sed抱怨它无法读取它 注1平台依赖性:
-i
的语法是GNU sed和mac os的sed之间的一个区别
注2:参数的“通常”顺序:
用于指示sed代码的-e
开关允许它位于文件名之间。这是一个陷阱(例如,我在其中尴尬地被抓住),它使您对在sed命令行中找到的内容的期望过高。
它允许
sed-i文件名-e“表达式”另一个文件名
这是一个非故意伪装的版本
sed-i'NoExtensionGiven'“expression”文件名另一个文件名
对于OSX和Linux上的支持,我使用一个简单的if检查来查看bash脚本是否在OSX或Linux上运行,并基于此调整命令的-I
参数
if[“$OSTYPE”==“darwin”*];然后
sed-i'-e的|$iconPath |图像主题暗/$iconfile | g'{}
其他的
sed-i-e的|$iconPath |图像主题为深色/$iconfile | g'{}
fi
在我的bash脚本中,我使用类似的东西(支持MacOS和Linux发行版):
sed选项=
如果[[“$OSTYPE”==“darwin”*];然后
sedpoption=“-i”
fi
sed$sedpoption“/^*/d”。/file
Btw:see:GNU sed和mac OS的sed之间有一个区别。-i
之后的''是什么?请在你的问题中添加OS和sed版本。@osi:GNU sed和mac OS的sed的语法。@osi:-i
表示就地,即直接在文件中编辑<代码>-i''
表示就地编辑名称为空字符串的文件。由于您可能没有一个名称为空字符串的文件,sed
抱怨它无法读取该文件。Linux术语在Windows上也适用于w/msys。谢谢你的提示。请在现有答案的基础上,特别是@Acidic9的答案,解释一下这篇文章提供的额外见解。我看不出你的答案和那个答案在功能上有什么不同。另外,“我使用类似这样的东西”并没有对此进行解释,否则代码只能给出答案。简言之,请让您的贡献更加明显,以避免给人留下抄袭的印象,并尽量少地、在功能上不相关地对其进行更改。