2012-06-26 145 views
2

我需要根据文件的名称递归地添加一个头到几个文件。sed命令中的bash变量

所以我曾尝试:

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%??},而不是名称的一部分文件(%??是删除一些结尾字符)。

任何帮助将是伟大的。

+0

确切欺骗[1](http://stackoverflow.com/q/3204302/495451)[2](http://stackoverflow.com/q/11146098/495451) – ormaaj

回答

3

使用双引号:

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

它没有使用-i和输出重定向任何意义,所以我省略了-i。另外,我在insert命令后添加了一个转义换行符。有些sed不需要换行符,但很多都可以。不过,使用sed这个看起来很奇怪。取而代之的是,只是做:

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