複数行のsedスクリプトエラー:改行文字を文字列区切り文字として使用できません。

複数行のsedスクリプトエラー:改行文字を文字列区切り文字として使用できません。

sedこのコマンドを操作しようとしています。

   sed -e \
     's|$API_URL|$(API_URL)|g ; \
      s|$API_KEY|$(API_KEY)|g ;  \
      s|$API_SECRET|$(API_SECRET)|g ;  \
      s|$API_SALT|$(API_SALT)|g ; \
      s|$STORAGE_FUNCTION|$(STORAGE_FUNCTION)|g ; \
      s|$STORAGE_ACCOUNT|$(STORAGE_ACCOUNT)|g ; \
      s|$STORAGE_CONTAINER|$(STORAGE_CONTAINER)|g' \
      ./src/environments/environment.template.ts > ./src/environments/environment.ts

ファイルのプレースホルダを置き換えます。

export const environment = {
   api: {
     url: '$API_URL',
     key: '$API_KEY',
     secret: '$API_SECRET',
     salt: '$API_SALT'
   }
};

ただし、次のエラーが発生します。

改行文字は文字列区切り文字としては使用できません。

ベストアンサー1

実際のエラーは、行アドレスとして使用されるときに区切り文字の前にバックスラッシュを追加することによって、正規表現を任意の区切り文字で区切ることができるという事実に由来します。

\@hello@d

これにより、正規表現に一致するすべての行が削除されますhello

/hello/d

会議。

ただし、改行文字はこのように区切り文字として使用することはできません。したがって、エラーが発生しました。


sed改行文字はすべて単一引用符で囲まれた文字列内にあるため、スクリプトは改行文字をエスケープする必要はありません。\実際の編集スクリプトの各行の末尾から以下を削除しますsed

sed -e 's|$API_URL|$(API_URL)|g
        s|$API_KEY|$(API_KEY)|g
        s|$API_SECRET|$(API_SECRET)|g
        s|$API_SALT|$(API_SALT)|g
        s|$STORAGE_FUNCTION|$(STORAGE_FUNCTION)|g
        s|$STORAGE_ACCOUNT|$(STORAGE_ACCOUNT)|g
        s|$STORAGE_CONTAINER|$(STORAGE_CONTAINER)|g' \
    infile >outfile

文は;改行文字に置き換えられます。たとえば、inのように同じ行を占めるステートメント間でのみ必要ですG;s/\n/ /

または:

sed -e 's|$API_URL|$(API_URL)|g' \
    -e 's|$API_KEY|$(API_KEY)|g' \
    -e 's|$API_SECRET|$(API_SECRET)|g' \
    -e 's|$API_SALT|$(API_SALT)|g' \
    -e 's|$STORAGE_FUNCTION|$(STORAGE_FUNCTION)|g' \
    -e 's|$STORAGE_ACCOUNT|$(STORAGE_ACCOUNT)|g' \
    -e 's|$STORAGE_CONTAINER|$(STORAGE_CONTAINER)|g' \
    infile >outfile

または、

sed "s/'\\$\([^']*\)'/'\$(\1)'/g" infile >outfile

のように見える'$something Whatever'ものは何でも交換してください'$(something Whatever)'

または、

sed 's/$\([A-Z_]*\)/$(\1)/g' infile >outfile

次のように置き換えます$SOME_THING$(SOME_THING)変数名に許可されている文字については少し厳密ですが、一重引用符は気にしません)。

おすすめ記事