查找shell脚本并重命名行

时间:2016-10-18 14:39:09

标签: bash shell sed find

我有一个名为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脚本中替换新字符串中的这个字符串吗?

3 个答案:

答案 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' '{}' +