xargs sed cmd 오류 xargs: gsed: 해당 파일이나 디렉터리가 없습니다.

xargs sed cmd 오류 xargs: gsed: 해당 파일이나 디렉터리가 없습니다.

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 종속성을 볼 수 있습니다.

  1. -i많은 버전이 이 옵션을 지원 sed하지만 파일 확장자에 대한 매개변수를 백업해야 합니다(일괄 내부 편집으로 시스템을 쉽게 망칠 수 있으므로 좋은 생각입니다). 따라서 -i.bak.
  2. GNU에서는 개행 문자로 취급되지만 대부분의 버전에서는 문자로 취급되는 \n대체에 사용할 수 있습니다 . sed올바른 방법은 검정색 슬래시가 앞에 오는 실제 개행 문자를 사용하는 것입니다.nsed

귀하의 스크립트에 대한 몇 가지 추가 팁을 제공해 드리겠습니다.

  • 대체에서 전체 일치 패턴을 반복하는 대신 다음을 사용할 수 있습니다 &.

    sed 's/long pattern/& added after the match/'
    
  • 작은 따옴표를 그대로 두고 실행하는 '\\n'대신 따옴표로 묶어서 직접 작성하는 이유는 무엇입니까 \n?

  • 일치하는 행 자체를 새 행으로 대체하여 행을 추가하는 대신 apend 명령을 사용하십시오 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/;}'
    

관련 정보