다음 줄이 포함된 파일이 있습니다.
master_green_cloud_init_version = "v1.16/"
내 bash 스크립트에는 비슷한 매개변수가 있습니다 userdata_version=v2.21
.
(ie ) 사이의 내용을 어떻게 바꿀 sed
수 있나요 ?""
"v1.16/"
$userdata_version
v1.16
계속 바뀌기 때문에 하드코딩할 수 없습니다 .
답변1
을 사용하려면 sed
설명하는 시나리오에 대해 다음 입력 파일이 있어야 합니다.
master_green_cloud_init_version = "v1.16/"
master_blue_cloud_init_version = "v1.16/"
이 스크립트 *
#!/bin/sh
userdata_version=v2.21
sed -i -e "/master_green_cloud_init_version/s/\".*\"/\"${userdata_version}\"/" input.txt
밝혀지다
$ more input.txt
master_green_cloud_init_version = "v2.21"
master_blue_cloud_init_version = "v1.16/"
$
sed
쉘 변수를 사용하려면 표현식에 큰따옴표가 필요합니다 . 이 내용을 참조하세요.답변도착하다sed 스크립트의 쉘 변수.
그런 다음 검색 중인 큰따옴표도 이스케이프 처리해야 합니다 \"
. 여는 큰따옴표에 한 번, 닫는 큰따옴표에 한 번, 이렇게 두 번 수행해야 합니다.
결과 -i
를 .stdout
노트: 어떤 이유로 버전 문자열 끝에 슬래시를 유지하려는 경우 \/
다음과 같이 이스케이프된 슬래시( )를 사용할 수 있습니다.
#!/bin/sh
userdata_version=v2.21
sed -e "/master_green_cloud_init_version/s/\".*\/\"/\"${userdata_version}\/\"/" input.txt
동일한 입력 파일에 대해 다음과 같이 지정됩니다.
master_green_cloud_init_version = "v2.21/"
master_blue_cloud_init_version = "v1.16/"
* 에서Linux/Unix 셸에서 sed를 사용하여 파일에서 텍스트를 찾고 바꾸는 방법:
sed를 사용하여 단어를 일치시키고 찾기 및 바꾸기를 수행하는 방법
이 예에서는 "love"라는 단어만 발견되며 줄 내용이 특정 문자열(예: FOO)인 경우 "sick"으로 대체됩니다.
sed -i -e '/FOO/s/love/sick/' input.txt
당신은 또한 볼 수 있습니다파일에서 문자열을 바꾸는 방법은 무엇입니까?
답변2
파일이 작성된 구성 파일이라고 가정TOML 형식, 그런 다음 사용할 수 있습니다tomlq
파서값을 변경하고 쉘 변수에 userdata_version
새 값을 지정하십시오.
tomlq -t --arg newversion "$userdata_version" \
'.master_green_cloud_init_version |= $newversion' file.toml
이렇게 하면 최상위 키 값이 master_green_cloud_init_version
내부 변수에 할당된 값으로 업데이트됩니다. 수정된 문서는 표준 출력에 기록됩니다(내부 편집에 이 옵션을 사용할 수 있음).--arg
$newversion
--in-place
시험:
$ cat file.toml
master_green_cloud_init_version = "v1.16/"
$ userdata_version=v2.21
$ tomlq -t --arg newversion "$userdata_version" '.master_green_cloud_init_version |= $newversion' file.toml
master_green_cloud_init_version = "v2.21"