Search code examples
bashconcatenation

How to concatenate a string and the contents of a file in BASH?


I am trying to concatenate the contents (a block of code) of a file called query.sql in a README.md document, that already contains some text. However, I would also like this block of code to be preceded by a heading "Model answer".

In other words, if my README.md file was currently structured as

# Title

Some text here.

the new file should look like

# Title

Some text here.

## Model answer

```sql
Contents of query.sql
```

The subtitle ## Model answer is currently not in any file, so the process should involve something like

cat "## Model answer\n\n```sql\n" query.sql "\n```" >> README.md

but cat only works with sets of files, not files and strings. How could I achieve the desired result in BASH?


Solution

  • First you can printf or echo -e the required text and then cat the file query.sql after that. You can use && or ; between the commands . If && is used then the second command will be executed only if the first command was successfull. ; is treated as a command separator

    { printf "## Model answer\n\n \`\`\`sql" && cat query.sql && printf "\n\`\`\`"; } >> README.md
    

    or

    { echo -e "## Model answer\n\n '''" ; cat query.sql ; echo -e "''' /n"; } >> README.md