I want to use a here-doc for sed commands and provide the file to be read and the output file.
I've looked at Here-Documents from Advanced Bash Scripting guide but it does not mention anything about regular arguments in using a here-doc. Is it even possible?
I'd like to achieve something like the following:
#!/bin/bash
OUT=/tmp/outfile.txt
IN=/my_in_file.txt
sed $IN << SED_SCRIPT
s/a/1/g
s/test/full/g
SED_SCRIPT
> $OUT;
Any help is really appreciated.
Best Answer
You can tell GNU sed to read the script from standard input with
-f -
,-f
meaning to read the script from a file, and-
meaning standard input as is common with a lot of commands.POSIX sed also supports
-f
, but the use of-
for standard input is not documented. In this case, you could use/dev/stdin
on Linux systems (and I seem to recall Solaris has this too, but I cannot confirm that right now)Using
<<-SED_SCRIPT
(with the '-' prefix) will allow the closingSED_SCRIPT
tag to be indented.