Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sed - Piping a string before the last line in a file

I have a command that prints a single line. I want to add/pipe this line to a file, just above its last line.

my_cmd | sed -i '$i' test

I just find an empty line in the correct place, above the last line. I notice that when I add any string as '$i foo', the "foo" gets printed in the correct place, but I want the piped line to be printed.

How can I use STDIN instead of "foo"?

like image 350
Tarek Eldeeb Avatar asked Nov 28 '22 07:11

Tarek Eldeeb


2 Answers

this should do the trick:

 sed -i "\$i $(cmd)" file

test:

kent$  cat f
1
2
3
4
5

kent$  sed -i "\$i $(date)" f

kent$  cat f
1
2
3
4
Tue Sep 30 14:10:02 CEST 2014
5
like image 87
Kent Avatar answered Dec 05 '22 11:12

Kent


Instead of passing your output to sed via pipe, you can use command substitution instead:

$ cat f
First line
Second line
Third line

$ sed -i '$i'"$(echo 'Hello World')" f
$ cat f
First line
Second line
Hello World
Third line

So in your case you can use:

sed -i '$i'"$(my_cmd)" test
like image 22
Josh Jolly Avatar answered Dec 05 '22 12:12

Josh Jolly