Bash променлива в командата sed

Трябва да добавя заглавка рекурсивно към няколко файла според името на файла.

Така че опитах:

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

проблемът е, че променливата, отразяваща името на файла, не се разширява и в заглавката имам ${i%??} вместо част от името на файла (%?? е за премахване на някои крайни знаци).

Всяка помощ би била чудесна.


person Community    schedule 26.06.2012    source източник
comment
точно дупка 1 2   -  person ormaaj    schedule 27.06.2012


Отговори (1)


Използвайте двойни кавички:

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

Няма смисъл да използвам -i и да пренасочвам изхода, така че съм пропуснал -i. Освен това добавих екраниран нов ред след командата за вмъкване. Някои sed не изискват нов ред, но много го правят. Въпреки това изглежда странно да се използва sed за това. Вместо това просто направете:

for i in *file; do     
  { echo "A;B;C;D;E;F;G;H;${i%??}"; cat a_${i}; } > header_a_${i}
done
person William Pursell    schedule 26.06.2012