Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make sed take input from pipe, and insert into a file

Tags:

sed

pipe

is it possible to use the pipe to redirect the output of the previous command, to sed, and let sed use this as input(pattern or string) to access a file?

I know if you only use sed, you can use something like

sed -i '1 i\anything' file

But can I do something like

head -1 file1 | sed -i '1 i\OutputFromPreviousCmd' file2

This way, I don't need to manually copy the output and change the sed command everytime

Update: Added the files I meant

head -3 file1.txt
Side A,Age(us),mm:ss.ms_us_ns_ps
 84 Vendor Specific, 0000000009096, 0349588242
 84 Vendor Specific, 0000000011691, 0349591828

head -3 file2.txt
 84 Vendor Specific, 0000000000418, 0349575322
 83 Vendor Specific, 0000000002099, 0349575343
 83 Vendor Specific, 0000000001628, 0349576662

I'd like to grab the first line of file1 and insert it to file2, so the result should be :

head -3 file2.txt
 Side A,Age(us),mm:ss.ms_us_ns_ps
 84 Vendor Specific, 0000000000418, 0349575322
 83 Vendor Specific, 0000000002099, 0349575343
 83 Vendor Specific, 0000000001628, 0349576662
like image 369
justnight Avatar asked Sep 20 '19 17:09

justnight


2 Answers

head -1 file1 | sed '1s/^/1i /' | sed -i -f- file2

This takes your one line of output, prepends the sed 1i command, the pipes that sed command stream to sed using -f- to take sed commands from stdin.

For example:

$ echo bob > bob.txt
$ echo alice | sed '1s/^/1i /' | sed -i -f- bob.txt
$ more bob.txt
alice
bob

This looks like pipes and not commands ending in > temp ; mv temp file2, but sed is doing that nonetheless when -i is used.

like image 85
stevesliva Avatar answered Oct 12 '22 07:10

stevesliva


This might work for you (GNU sed):

head -1 file1 | sed -i '1e cat /dev/stdin' file2

Insert the first line of file1 into the start of file2.

But why not use cat?:

cat <(head -1 file1) file2
like image 36
potong Avatar answered Oct 12 '22 07:10

potong