2

I need to add an header recursively to several file according to the name of the file.

So I have tried:

for i in *file 
do     
sed -i '1 i \A;B;C;D;E;F;G;H;${i%??}' a_${i} > header_a_${i}
done

the problem is that the variable reflecting the name of the file does not expand and in the header I have ${i%??} instead of part of the name file (%?? is to remove some ending characters).

Any help would be great.

  • exact dupe [1](http://stackoverflow.com/q/3204302/495451) [2](http://stackoverflow.com/q/11146098/495451) – ormaaj Jun 27 '12 at 12:33

1 Answers1

3

Use double quotes:

    sed '1 i\
A;B;C;D;E;F;G;H;'"${i%??}" a_${i} > header_a_${i}

It doesn't make any sense to use -i and to redirect the output, so I've omitted -i. Also, I've added an escaped newline after the insert command. Some sed do not require the newline, but many do. However, it seems odd to use sed for this. Instead, just do:

for i in *file; do     
  { echo "A;B;C;D;E;F;G;H;${i%??}"; cat a_${i}; } > header_a_${i}
done
William Pursell
  • 204,365
  • 48
  • 270
  • 300