如何用变量替换字符串?

如何用变量替换字符串?

我正在尝试编写一个包含循环的脚本,该循环输入一系列包含同一文件的目录,以将文件中的文本字符串替换为与目录名称匹配的变量。
变量是 $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

我得到的是 $iZ,而不是 DZ,而没有改变变量。
我怎样才能解决这个问题?

答案1

假设您希望在 GNU 系统上将文件DZ中所有出现的./fooz/FILE替换为, ,则可能是:fooZ

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

相关内容