Dave Mateer
Dave Mateer

Reputation: 17946

Insert content into template file using bash

I have a template file I want to copy and then edit from a script, inserting content at specific template points. For example, my template file might be something like,

...
rm -rf SomeDirectory
make install
#{INSERT-CONTENT-HERE}
do-something-else
...

In another script, I want to add content at "#{INSERT-CONTENT-HERE}" within a loop, i.e.

for i in c; do
  # Write content to the template file copy at the correct point.
done

I think sed is the right tool, but I'm not familiar enough to know the syntax, and the man page isn't helping.

Upvotes: 1

Views: 1710

Answers (2)

Dave Mateer
Dave Mateer

Reputation: 17946

You can copy the output of all the commands into a temporary file and then copy the contents of that entire file into the template file:

TEMPFILE=`mktemp` && (
  for i in c
    echo "SomeTextBasedOn $i" >> $TEMPFILE
  done
  sed -i '/{INSERT-CONTENT-HERE}/r '$TEMPFILE targetfile
  rm $TEMPFILE
)

Upvotes: 1

perreal
perreal

Reputation: 97938

An example:

echo "Line #{INSERT-CONTENT-HERE}" | sed 's/#{INSERT-CONTENT-HERE}/---/'

To modify a file:

sed -i 's/#{INSERT-CONTENT-HERE}/---#{INSERT-CONTENT-HERE}/' filename

where -i means in-place edit so be warned

if you do:

sed -i.bak 's/#{INSERT-CONTENT-HERE}/---/' filename

it should back up original as filename.bak

also to make multiple substitutions at each line use the g flag:

sed -i.bak 's/#{INSERT-CONTENT-HERE}/---/g' filename

Upvotes: 1

Related Questions