1243
Comment: here-doc method improved
|
← Revision 12 as of 2017-02-14 19:48:12 ⇥
903
Sorry, but the substitution-inside-here-doc is not safe. There's no guarantee bash will slurp the old content before overwriting it.
|
Deletions are marked like this. | Additions are marked like this. |
Line 2: | Line 2: |
Line 7: | Line 6: |
Line 17: | Line 15: |
Line 18: | Line 17: |
Line 22: | Line 20: |
Line 25: | Line 24: |
Line 30: | Line 28: |
Line 31: | Line 30: |
Line 37: | Line 35: |
With bash version >= 4 , this can also be done using here-docs either on command line or inside a script. PS: Has not been tested in other shells. {{{ newline="This is line -1" cat <<EOF >a.txt $newline #variables are accepted This is line 0 #fixed string $(cat a.txt) #the old file - same name is ok EOF }}} |
How do I prepend a text to a file (the opposite of >>)?
You cannot do it with bash redirections alone; the opposite of >> does not exist....
To insert content at the beginning of a file, you can use an editor, for example ex:
ex file << EOF 0a header line 1 header line 2 . w EOF
or ed:
printf '%s\n' 0a "line 1" "line 2" . w | ed -s file
ex will also add a newline character to the end of the file if it's missing.
Or you can rewrite the file, using things like:
{ echo line; cat file ;} >tmpfile && mv tmpfile file echo line | cat - file > tmpfile && mv tmpfile file
Some people insist on using the sed hammer to pound in all the screws:
sed "1iTEXTTOPREPEND" filename > tmp && mv tmp filename
There are lots of other solutions as well.