쉘 변수로 sed replace를 구현하려고합니다. 나는 등을 괄호에 문제가 계속 "
를 사용하려고 시도하는 동안 지금까지 지금은 나오지 작업하면서이 대답 https://stackoverflow.com/a/5156322/675100Sed가 쉘 변수로 바꾸기
에 명시된 것과 같이 쉘 변수를 확장하지 않습니다 '
sed -i -r 's#(export\ PATH=")(.*)#\1/home/USER/bin:~/.local/bin:\2#' ~/.zshrc
그러나 불행하게도 '
로 교체 첫 번째 시도가 될 것이다 나는 항상 대신 USER
의 whoami
을 사용하려면이 제네릭하고 싶다
sed -i -r "s#\(export\ PATH=\"\)(.*)#\1/home/`whoami`/bin:~/.local/bin:\2#" ~/.zshrc
sed: -e expression #1, char 60: invalid reference \2 on `s' command's RHS
편집
나는 두 번째 그룹을 탈출
sed -i -r "s#\(export\ PATH=\"\)\(.*\)#\1/home/$(whoami)/bin:~/.local/bin:\2#" ~/.zshrc
을 시도했지만 나는 유사한 오류 얻을 : 문제가
-r
플래그를했다 그래서
sed: -e expression #1, char 63: invalid reference \2 on `s' command's RHS
참고 만'$' 그리고 back-tick은 큰 따옴표 안에 문제를 일으킨다. 괄호는'$ (whoami)'와 같이'$'이 붙은 경우에만 관련이 있습니다. –
'(. *)'주위에 두 번째 쌍이 아닌 첫 번째 괄호 쌍을 이스케이프 처리했습니다. 그래서 '\ 2'로 참조 할 수있는 두 번째 그룹이 없습니다. 또한,'-r'은 무엇을위한 것인가? 'sed'의 사본에는 그 중 하나가 없습니다 ... – svckr
왜'~/bin' 대신에'/ home/USER/bin'을 특별히 사용하고 있습니까? –