I am trying to replace a string within a couple of similar sql scripts. in my toolbox I have a for loop as well as grep and sed inside a bash script.

#!/usr/bin/env bash

for efa_instance in efa_bauen_bb efa_bauen_bw
        echo ${efa_instance}
        secret=$(grep ${efa_instance}_user efa_secret.csv | cut -d\; -f3)
        echo ${secret}
        echo replacing password for ${efa_instance}
        sed -i 's/<via Mail>/${secret}/' ${efa_instance}.service.sql

this, however replaces the string <via Mail> with literally the string ${secret} instead of the value stored in the ${secret} variable.

the components of this work as expected, just trying to use sed to actually replace the placeholder fails.

Am i ot seing something obvious or is my approach flawed by design.

maybe worth mentioning (just if somebody was tempted to recommend that) ... I have never used awk and have no knowledge ot if whatsoever


1 Answer 1


Use " instead of ':

sed -i "s/<via Mail>/${secret}/" ${efa_instance}.service.sql
  • great thx. I wasn't aware I was actually that close :-)
    – vrms
    Nov 14, 2022 at 15:45

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .