sed에 변수 전달

sed에 변수 전달

양식에 쉘 sed변수를 사용할 수 없습니다 $NUMBER. 내 쉘 스크립트에는 다음 줄이 있습니다.

cat shared.txt sed 's/whatever1/$2 ... whatever2/' > shared2.txt

결과 shared2.txt는 다음과 같습니다.

...$2....

내가 뭘 잘못했나요?

답변1

작은따옴표 대신 큰따옴표를 사용해 보세요.

sed "s/whatever1/$2 ... whatever2/" shared.txt > shared2.txt

답변2

큰따옴표를 사용하면 효과가 있지만 어떤 경우에는 원하는 결과를 얻지 못할 수도 있습니다. 예를 들어,

t="bcd"
echo '123$tbcd' | sed "s/$t$t//"

(예, 이것은 약간 인위적인 것입니다!) 특정 문자를 이스케이프 처리하면 이를 방지할 수 있습니다.

echo '123$tbcd' | sed "s/\$t$t//"

그러나 이것을 놓치기 쉽습니다. 제 생각에는 가장 안전한 접근 방식은 변수를 큰따옴표로 묶고(공백이 sed 명령을 방해하지 않도록) 나머지 문자열을 작은따옴표로 묶는 것입니다(특정 문자를 이스케이프할 필요가 없도록 하기 위해).

echo '123$tbcd' | sed 's/$t'"$t"'//'.

관련 정보