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システムを使用している可能性があり、作成した方法がほとんどsedsedバージョンで実行されない可能性があります。そのため、GNUをsedインストールしgsedたり、適切にスクリプトを変更したりできますsed。 2つの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/;}'
    

関連情報