myfiles.hcl
파일에서 다음 줄을 바꾸려고 합니다.
"-var-file=${get_parent_terragrunt_dir()}/variables/eu-west-2.tfvars",
그리고
"-var-file=${get_parent_terragrunt_dir()}/variables/eu-west-2.tfvars",
"-var-file=${get_parent_terragrunt_dir()}/variables/eu-west-2-prod.tfvars",
xargs gsed cmd 사용
find . -name 'myfiles.hcl' | xargs grep -l 'prod' | xargs gsed -i 's|"-var-file=${get_parent_terragrunt_dir()}/variables/eu-west-2.tfvars",|"-var-file=${get_parent_terragrunt_dir()}/variables/eu-west-2.tfvars",'\\n' "-var-file=${get_parent_terragrunt_dir()}/variables/eu-west-2-prod.tfvars",|'
하지만 오류가 발생해요xargs: gsed: No such file or directory
답변1
*BSD와 같은 GNU가 아닌 시스템을 사용하고 있을 수 있으며 sed
작성한 방식이 대부분의 sed
버전에서 실행되지 않을 수 있습니다. 따라서 GNU를 sed
로 설치 gsed
하거나 에 맞게 스크립트를 변경할 수 있습니다 sed
. 두 가지 GNU 종속성을 볼 수 있습니다.
-i
많은 버전이 이 옵션을 지원sed
하지만 파일 확장자에 대한 매개변수를 백업해야 합니다(일괄 내부 편집으로 시스템을 쉽게 망칠 수 있으므로 좋은 생각입니다). 따라서-i.bak
.- GNU에서는 개행 문자로 취급되지만 대부분의 버전에서는 문자로 취급되는
\n
대체에 사용할 수 있습니다 .sed
올바른 방법은 검정색 슬래시가 앞에 오는 실제 개행 문자를 사용하는 것입니다.n
sed
귀하의 스크립트에 대한 몇 가지 추가 팁을 제공해 드리겠습니다.
대체에서 전체 일치 패턴을 반복하는 대신 다음을 사용할 수 있습니다
&
.sed 's/long pattern/& added after the match/'
작은 따옴표를 그대로 두고 실행하는
'\\n'
대신 따옴표로 묶어서 직접 작성하는 이유는 무엇입니까\n
?일치하는 행 자체를 새 행으로 대체하여 행을 추가하는 대신
a
pend 명령을 사용하십시오sed
.sed '/the line after which to append/a\ the new line'
새 줄이 주어진 줄과 거의 동일한 특별한 경우에는 줄을 인쇄하고 수정하여 오타를 피할 수 있습니다.
sed -i.bak '\|"-var-file=${get_parent_terragrunt_dir()}/variables/eu-west-2.tfvars"|{p;s/west-2/&-prod/;}'