bash関数で「検索」を実行するために「sed」を使用する方法

bash関数で「検索」を実行するために「sed」を使用する方法

ディレクトリを再帰的に検索して置き換えて、ある文字列を別の文字列に変更する単純なbash関数を作成しようとしています。これが私が得るものです:

function sar () {
    from="$1"
    shift
    to="$1"
    shift

    if [[ $from == '' || $to == '' ]]
    then
        echo Usage: sar \<from\> \<to\> \<filename\>
        return
    fi

    while [[ $# -gt 0 ]]
    do
      filename="$1"
      shift
      find ./$filename -type f -exec sed -i -e 's/$from/$to/g' {} \;
    done
}

たとえば、

$ sar xxxx yyyy mydir

./mydirで実行しfindてアクセスするすべてのファイルでxxxxをyyyyに置き換える必要があります。コマンドはエラーなしで実行されますが、置換は実行されません。

set -x実行

+ find ./mydir -type f -exec sed -i -e 's/$from/$to/g' '{}' ';'

$from解決されて$toおらず、いくつかの追加の参照が表示されました。

bash関数でこのコマンドを書く正しい方法は何ですか(bashスクリプトと同じ構文規則に従うとします)。

ベストアンサー1

一重引用符内に変数を入れても拡張されないため、二重引用符を使用する必要があります。

... sed -i -e "s/$from/$to/g" ...

おすすめ記事