내 Terraform TF 파일에는 한 줄이 있습니다.
green_nodes_asg_instance_count = 0
$blue_nodes_asg_instance_count
나는 그것을 =로 바꾸고 싶습니다. 3
결과는 다음과 같습니다:
green_nodes_asg_instance_count = 3
나는 이것을 시도했지만 작동하지 않습니다.
sed -i 's/\(.*\)green_nodes_asg_instance_count\(.*\)=\(.*\)0/\1green_nodes_asg_instance_count\2=\3\$blue_nodes_asg_instance_count/g' test.tf
답변1
\(.*\)
패턴 시작 부분에 포함시켜서 그 자체로 교체하는 것은 쓸모가 없습니다.- 두 번째, 세 번째 그룹도 마찬가지다. 직접 교체하세요
green_nodes_asg_instance_count
별로 도움이 되지green_nodes_asg_instance_count
않습니다.
이전하고 싶다면
green_nodes_asg_instance_count = 0
입력하다
green_nodes_asg_instance_count = 3
0
그러면 아무것도 바뀌지 않습니다.
sed '/green_nodes_asg_instance_count *= *0/s/0/3/' test.tf
/green_nodes_asg_instance_count *= *0/
는주소, 이는 다음 명령이 정규식과 일치하는 줄에서만 실행된다는 것을 의미합니다.*
공백 뒤에 공백을 여러 개 추가했습니다 .s/0/3/
s
0
대체품으로 교체하세요
답변2
나는 그것을 할 것이다:
perl -pi -e 's{\bgreen_nodes_asg_instance_count\s*=\s*\K.*}{3}' your-file
green_nodes_asg_instance_count<optional-whitespace>=<optional-whitespace>
이후의 모든 항목을 다음으로 변경합니다 3
(단, 예를 들어 단어 문자를 따르지 않는 경우에만 olive_green_nodes_asg_instance_count = 123
).
이는 -i
비표준 확장(지원하는 구현 간에 호환되지 않는 동작이 있음)을 사용하는 것보다 이식성이 뛰어나며 sed
기본 BRE보다 고급 PCRE를 사용할 수 있음을 의미합니다.sed