Friday, May 3, 2024
 Popular · Latest · Hot · Upcoming
10
rated 0 times [  10] [ 0]  / answers: 1 / hits: 21178  / 2 Years ago, sat, march 26, 2022, 8:32:55

Lets say i have two files foo and bar. I want a replace the string "this is test" in foo with the contents of the file bar. How can i do this using a one liner sed?



I have used:



sed -i.bak 's/this is test/$(cat bar)
/g' foo


but the the string is being replaced by literal $(cat bar) rather than the contents of bar. I have tried using quotations but the result remains the same.



Radu's answer is correct as far as the quote is concerned. Now the problem is lets say my bar file contains:



this
is
a
test
file


Now if i run the command it gives an error:




sed: -e expression #1, char 9: unterminated `s' command




18 times.


More From » sed

 Answers
6

The following command should work for what you want:



sed "s/this is test/$(cat bar)/" foo


If foo contain more then one line, then you can use:



sed "s/this is test/$(sed -e 's/[&/]/&/g' -e 's/$/n/' bar | tr -d '
')/" foo


or:



sed -e '/this is a test/{r bar' -e 'd}' foo


Source of the last two commands: Substitute pattern within a file with the content of other file



To make the change in foo file, use sed -i.


[#22723] Saturday, March 26, 2022, 2 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
bewre

Total Points: 164
Total Questions: 108
Total Answers: 106

Location: Ghana
Member since Sun, Mar 27, 2022
2 Years ago
;