sed 명령을 통해 변수를 업데이트할 수 없습니다

sed 명령을 통해 변수를 업데이트할 수 없습니다

두 개의 변수를 할당했지만 업데이트할 수 없습니다

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

관련 정보