Page 1 of 1

Trying to make script to insert file into tmp.txt

Posted: Tue 02 Oct 2012, 03:34
by toowoombalinux
G'day,
After trawling through the Internet I've come to a standstill with the following script. And I'm not a scripting guru....
I want to insert the file exit1.tx into the middle of tmp.txt.

Code: Select all

#!/bin/sh
file=tmp.txt
lines=`wc -l $file |awk '{print $1}'`
middle=`expr $lines / 2`
sed -i '${middle}r exit1.txt' tmp.txt
I know that the expressions for lines and middle work however it doesn't want to play ball with sed. If I substitute ${middle} with a number then the sed expression works

exit1.txt has this:

Code: Select all

<icon x="704" y="704" label="Exit User Desktop">/usr/share/Audio-lauchers/desktop/User/exit</icon>
so it's chock full of characters which interfere with sed's syntax.

The answer is probably simple but so am I...

Cheers
Martin

Posted: Tue 02 Oct 2012, 03:44
by 01micko
Try it with double quotes, singles take things as literal.Might work.

Code: Select all

#!/bin/sh 
 file=tmp.txt 
 lines=`wc -l $file |awk '{print $1}'` 
 middle=$(($lines / 2))  #bash math thrown in
 sed -i "${middle}r exit1.txt" tmp.txt
There might even be a better (if speed is an issue) way with a "while read line; do this to $line; done < that" loop

What exactly are you trying to do?

Posted: Tue 02 Oct 2012, 19:59
by seaside
toowoombalinux,

Since placing some xml code in the middle of a file might break up an existing xml sequence, you may find it better to put it following a known line. For instance, if an existing tag in "tmp.txt" ends with </icon> , you could place "exit1.txt" in the line following that tag end by -

Code: Select all

 sed -i '/<\/icon>/r exiit1.txt'  tmp.txt
Cheers,
s