sedはパラメータの値を置き換えます。

sedはパラメータの値を置き換えます。

単純な操作のように見えますが、sed呼び出しは私が送信したIP値を置き換えませんでした。代わりに、localhostを "${IP}"に置き換えます。

substitute() {
    export IP=$1
    echo $IP
    LC_ALL=C find . -type f -name '*.txt' -exec sed -i.bak 's/localhost/"${IP}"/g' {} \;
}

substitute 10.20.30.40

送信された値をパラメータに置き換える目的をどのように達成しますか?

ベストアンサー1

一重引用符のため、$ {IP}は値に挿入されません。 bash -xが役に立ちます(つまり、スクリプトで#!/ bin / bashのshebangに-xを追加してください)。

    + substitute 10.20.30.40
+ export IP=10.20.30.40
+ IP=10.20.30.40
+ echo 10.20.30.40
10.20.30.40
+ LC_ALL=C
+ find /tmp -type f -name '*.txt' -exec sed -i.bak 's/localhost/"${IP}"/g' '{}' ';'

お互いに交換すると、

   + substitute 10.20.30.40
+ export IP=10.20.30.40
+ IP=10.20.30.40
+ echo 10.20.30.40
10.20.30.40
+ LC_ALL=C
+ find /tmp -type f -name '*.txt' -exec sed -i.bak 's/localhost/'\''10.20.30.40'\''/g' '{}' ';'

補間が機能します。最後に引用符が必要かどうかはわかりませんが...

おすすめ記事