多行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

请注意,;语句之间被换行符替换。仅在占据同一行的语句之间需要它们,例如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)对变量名称中允许的字符稍微严格一些,但不关心单引号)。

相关内容