2012-01-04 14 views
2

一束のファイルで同じ行を削除したいとしましょう。sedを使って複数のファイルを一括して削除する

[03:18] ./cleanup.sh 2731 3009 trace_X+0.01080_Y+0.00309_Z-0.00000.dat 

と私は私が間違っているのは何

sed -i -e '2731,3009d' trace_X+0.01080_Y+0.00309_Z-0.00000.dat 
sed: -e expression #1, char 12: unterminated `s' command 

を取得する:私はこのように呼んで

st=$1 
en=$2 
shift 2 
for i in $*; do 
    echo "sed -i -e '${st},${en}d' $i" 
    sed -i -e '${st},${en}d' $i 
done 

:私はこのような単純なbashスクリプトを持っていますか?私は...助けを

感謝を複数の変数を囲む引用符または呼び出し元の文が、運にファイル名を追加してみました!

+1

ところで、 '$ *'は間違っています。 $ @ "でiのために'を使用してください。 –

答えて

3

あなたは、実際のsedコマンドに二重引用符を使用する必要があります。

sed -i -e "${st},${en}d" $i 

単一引用符内には変数の展開はありません。

あなたが響いている文字列は二重引用符で囲まれているので、それがエコーに拡大したという事実です。

そして実際には、これらだけ今まであなたが扱っている番号で、あれば、あなたも完全に引用符をドロップすることができます(sed -i -e ${st},${en}d)。

+0

しかし、 'echo'コールの出力で示されるように正しく展開しますか? – FrenchKheldar

+0

申し訳ありませんが、それはうまく働いた、おかげで愚かだった! – FrenchKheldar

+0

そして、外側の二重引用符のためにechoステートメントが正しく展開されますか? – FrenchKheldar

関連する問題