同じファイルを含む一連のディレクトリを取得し、ファイルのテキスト文字列をディレクトリ名と一致する変数に置き換えるループを含むスクリプトを作成しようとしています。
変数は$ 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/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