sed를 사용하여 파일의 경로를 새 경로로 바꾸고 있습니다. 여기에 누락되거나 존재하지 않는 것은 무엇입니까?
# sed -i `s|/$SPLUNK_HOME/bin/splunk|/opt/splunk/bin/splunk|g' filename
나는 >
동의했다.
답변1
`
결코 종료되지 않는 하위 쉘 문을 열려면 백틱( )을 사용합니다 . 견적이 일치하는지 확인하세요.
프롬프트는 >
에 정의된 보조 프롬프트를 표시하여 끝나지 않은 인용문에 대한 추가 입력을 찾고 있음을 알려주는 셸입니다 PS2
.
스크립트에서 매개변수 확장을 사용하려고 하므로 약한 따옴표( "
)를 사용하십시오.
예를 들어:
$ cat haystack
I found some straw in here!
$ needle=straw
$ sed "s/$needle/pins/" haystack
I found some pins in here!
"
약한 따옴표( )와 강한 따옴표( )를 사용할 '
때 어떤 일이 발생하는지 살펴보겠습니다 .
$ set -x
$ sed "s/$needle/pins/" haystack
+ sed s/straw/pins/ haystack
I found some pins in here!
$ sed 's/$needle/pins/' haystack
+ sed 's/$needle/pins/' haystack
I found some straw in here!
보시다시피 약한 따옴표를 사용하면 $needle
셸에서 요구하는 대로 매개변수 확장이 수행 됩니다.앞으로 sed
항상 볼 수 있습니다. 큰 따옴표를 사용하면 이런 일이 발생하지 않으므로 sed
이제 정규 표현식이 검색됩니다 /$needle/
. 즉, "입력 끝 뒤에 문자열이 옵니다. needle
"는 어떤 것과도 일치하지 않으므로 교체가 수행되지 않습니다.