sed命令中的Bash变量

时间:2012-06-26 14:01:13

标签: bash sed expand

我需要根据文件的名称递归地将标题添加到多个文件中。

所以我尝试过:

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

任何帮助都会很棒。

1 个答案:

答案 0 :(得分: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