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)
変数名に許可されている文字については少し厳密ですが、一重引用符は気にしません)。