2012-06-26 50 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