동일한 파일이 포함된 일련의 디렉터리를 가져와 파일의 텍스트 문자열을 디렉터리 이름과 일치하는 변수로 바꾸는 루프가 포함된 스크립트를 작성하려고 합니다.
변수는 $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