文字列を変数に置き換えるには?

文字列を変数に置き換えるには?

同じファイルを含む一連のディレクトリを取得し、ファイルのテキスト文字列をディレクトリ名と一致する変数に置き換えるループを含むスクリプトを作成しようとしています。
変数は$ i = 3,4,5で、ファイル名はFILEです
。これまでに作成した内容は次のとおりです。

for i in ./*z  
do
  cd $i  
  if  
    grep -q 'DZ' FILE
  then
    sed -i 's/DZ/$iZ/g' FILE
  fi  
  cd ..  
done

変数を変更せずにDZの代わりに$ iZを取得します。
この問題をどのように解決できますか?

答え1

GNUシステムでファイル内DZのすべての項目をに置き換えたいとします./fooz/FILEfooZ

grep -lZe DZ -- *z/FILE |
  xargs -r0 perl -pi -e '
    my $repl = "${1}Z" if $ARGV =~ m{(.*?)z/};
    s/DZ/$repl/g' --

答え2

変数を拡張するには、"sed行に一重引用符ではなく二重引用符を使用する必要があります。'それ以外の場合、$iまだ拡張はありません。また、Z変数の一部ではないため、構文を使用する区切り文字が必要です${i}。したがって、スクリプトは次のようにする必要があります。

for i in ./*z  
do
  cd $i  
  if  
    grep -q 'DZ' FILE
  then
    sed -i "s/DZ/${i}Z/g" FILE
  fi  
  cd ..  
done

関連情報