변수를 사용하여 쉘 스크립트의 문자열 바꾸기
쉘 스크립트 내부의 문자열을 대체하기 위해 아래 코드를 사용하고 있습니다.
echo $LINE | sed -e 's/12345678/"$replace"/g'
그러나 $replace
그 변수의 값 대신에 대체되고 있습니다.
아무도 무엇이 잘못되었는지 말할 수 있습니까?
해석하려는 경우 $replace
작은 따옴표는 변수 대체를 방지하므로 사용하지 않아야합니다.
시험:
echo $LINE | sed -e "s/12345678/\"${replace}\"/g"
당신이 따옴표에 넣어 원하는 가정이있는 경우. 하지 않는 , 사용을 인용합니다 :
echo $LINE | sed -e "s/12345678/${replace}/g"
성적 증명서:
pax> export replace=987654321
pax> echo X123456789X | sed "s/123456789/${replace}/"
X987654321X
pax> _
이스케이프하지 않는 한 혼동을 유발할 수 있으므로 (예 를 들어) ${replace}
중요한 문자가 없는지 확인하십시오 . 그러나 말했듯이 한 번호를 다른 번호로 바꾸는 경우 문제가되지 않습니다.sed
/
쉘 (bash / ksh)을 사용할 수 있습니다.
$ var="12345678abc"
$ replace="test"
$ echo ${var//12345678/$replace}
testabc
질문에 국한되지는 않지만 이전 답변에서 명확성을 위해 확장 된 동일한 종류의 기능이 필요한 사람들을 위해 :
# create some variables
str="someFileName.foo"
find=".foo"
replace=".bar"
# notice the the str isn't prefixed with $
# this is just how this feature works :/
result=${str//$find/$replace}
echo $result
# result is: someFileName.bar
str="someFileName.sally"
find=".foo"
replace=".bar"
result=${str//$find/$replace}
echo $result
# result is: someFileName.sally because ".foo" was not found
작은 따옴표는 매우 강력합니다. 일단 안으로 들어가면 떠날 때까지 변수 대체를 호출하기 위해 할 수있는 일이 없습니다. 대신 큰 따옴표를 사용하십시오.
echo $LINE | sed -e "s/12345678/$replace/g"
echo $LINE | sed -e 's/12345678/'$replace'/g'
여전히 작은 따옴표를 사용할 수 있지만 올바른 위치에서 변수를 확장하려면 "열어야"합니다. 그렇지 않으면 문자열이 "문자 그대로"사용됩니다 (@paxdiablo가 올바르게 언급했듯이 그의 대답도 정확합니다)
우아한 해결책을 찾았습니다 .
echo ${LINE//12345678/$replace}
쉘이 변수를 확장하게하려면 다음과 같은 큰 따옴표를 사용해야합니다.
sed -i "s#12345678#$replace#g" file.txt
$replace
특수 sed
문자 ( #
, \
) 가 포함 된 경우 중단됩니다 . 그러나 $replace
이를 인용하기 위해 사전 처리 할 수 있습니다.
replace_quoted=$(printf '%s' "$replace" | sed 's/[#\]/\\\0/g')
sed -i "s#12345678#$replace_quoted#g" file.txt
대신 사용
echo $LINE | sed -e 's/12345678/$replace/g'
this works for me just simply remove the quotes
I prefer to use double quotes , as single quptes are very powerful as we used them if dont able to change anything inside it or can invoke the variable substituion .
so use double quotes instaed.
echo $LINE | sed -e "s/12345678/$replace/g"
참고URL : https://stackoverflow.com/questions/3306007/replace-a-string-in-shell-script-using-a-variable
'code' 카테고리의 다른 글
PHP로 작성된 괜찮은 PHP 파서가 있습니까? (0) | 2020.10.12 |
---|---|
sqlalchemy : 하나의 쿼리로 여러 테이블을 조인하는 방법은 무엇입니까? (0) | 2020.10.12 |
Swift의 userInfo에서 키보드 크기 가져 오기 (0) | 2020.10.11 |
0.5에 가장 가까운 자바 스크립트 반올림 숫자 (0) | 2020.10.11 |
"마지막 100 바이트"인터뷰 시나리오 (0) | 2020.10.11 |