Bash에서 파일의 숫자를 빠르게 바꾸는 방법은 무엇입니까?

Bash에서 파일의 숫자를 빠르게 바꾸는 방법은 무엇입니까?

내 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/ s0대체품으로 교체하세요

답변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

관련 정보