我有一个名为script.sh的shell脚本。我需要找到这个脚本并在脚本
中更改值来自:
bash $current_dir/run.sh
到
./run.sh.x
我的解决方案如下:
find -maxdepth 10 -name "script.sh" -exec sed -i 's#bash '$current_dir'#run.sh#.#runs.sh.x#' {} \ ;
但我的命令仍然不起作用。知道如何在我的shell脚本中替换新字符串中的这个字符串吗?
答案 0 :(得分:2)
您的sed
表达似乎是个问题。
您可以使用:
find . -maxdepth 10 -name "script.sh" -exec sed -i 's#bash \$current_dir/run\.sh#./run.sh.x#' {} +
答案 1 :(得分:1)
@anubhava是对的。您可以使用的另一个sed命令。
find . -maxdepth 10 -name "script.sh" -type f | xargs -I {} sed -i 's/.*\/run.sh/\.\/run.sh.x/g' {}
答案 2 :(得分:1)
避免sed
兼容性问题的一种方法是依靠perl
。采纳BashFAQ #21的答案:
search='bash $current_dir/run.sh'
replace='./run.sh.x'
in="$search" out="$replace" find . -name script.sh -exec \
perl -pi -e 's/\Q$ENV{"in"}/$ENV{"out"}/g' '{}' +