두 개의 변수를 할당했지만 업데이트할 수 없습니다
x=$(cat /scratch/env.properties | grep ConfigPath)
y=$(ConfigPath=/scratch/a/b)
그런 다음 sed는 env.properties의 ConfigPath를 대체합니다.
sed 's/$x/$y/' env.properties
$y에 지정된 env.properties의 ConfigPath는 업데이트되지 않습니다.
답변1
첫째, 충분하지 cat
않습니다 grep
.
x="$(grep ConfigPath /scratch/env.properties)"
둘째, 나는 이것이 당신이 원하는 임무가 아니라고 생각합니다.
y=$(ConfigPath=/scratch/a/b)
변수에 문자열을 y
담으 려면 ConfigPath=/scratch/a/b
다음과 같아야 합니다.
y="ConfigPath=/scratch/a/b"
$(...)
는Bash의 명령 대체.
sed
셋째, 쉘 확장을 유발하려면 명령에 큰따옴표를 사용해야 합니다 x
.y
sed "s/$x/$y/" env.properties
또한 /
이는 구분 기호이므로 Unix 경로를 사용할 때 좋지 않은 선택입니다. 쉼표와 같은 다른 문자를 사용하십시오.
sed "s,$x,$y," env.properties
사용자들이 지적했듯이
선행은 이루기가 어렵다
아래 주석에서 줄의 시작 부분에 sed
있는지 확인하고 사용하면 ConfigPath
이 작업을 더 쉽고 좋게 만들 수 있습니다.
sed "s,^ConfigPath=.*$,ConfigPath=/scratch/a/b," env.properties