次のような1行を使用するときは、古いファイルの変数を新しいファイルに置き換えたいと思います。
cat ../oldFile.html | sed "s@$dayMaxInNew@$dayMaxIn@g" > newFile
newFileに結果があります。
ただし、次のように2つ以上の行を使用する場合:
cat ../oldFile.html | sed "s@$dayMaxInNew@$dayMaxIn@g" > newFile
cat newFile | sed "s@$dayAvgInNew@$dayAvgIn@g" > newFile
cat newFile | sed "s@$dayCurInNew@$dayCurIn@g" > newFile
newFileに結果がありません。睡眠を試してみましたが、うまくいきません。 PS。 2行目と3行目では、同じファイルの変数を置き換えます。どんな提案がありますか?
ベストアンサー1
リダイレクトを実行すると、コマンドが実行される前にファイルが削除(クリーンアップ)されます。コマンドはsponge
以下から来ます。その他のユーティリティ、ファイルを書き込む前にファイルの標準入力を吸収します。これにより、コマンドの実行後にファイルが上書きされます。
cat ../oldFile.html | sed "s@$dayMaxInNew@$dayMaxIn@g" > newFile
cat newFile | sed "s@$dayAvgInNew@$dayAvgIn@g" | sponge newFile
cat newFile | sed "s@$dayCurInNew@$dayCurIn@g" | sponge newFile
moreutilsがない場合は、一時ファイルを使用できます。また、使用する必要はありませんcat
。
sed "s@$dayMaxInNew@$dayMaxIn@g" < ../oldFile.html > newFile
sed "s@$dayAvgInNew@$dayAvgIn@g" < newFile | sponge newFile
sed "s@$dayCurInNew@$dayCurIn@g" < newFile | sponge newFile
最後に、複数のsedコマンドを1つにまとめることができます。
sed "s@$dayMaxInNew@$dayMaxIn@g
s@$dayAvgInNew@$dayAvgIn@g
s@$dayCurInNew@$dayCurIn@g" < ../oldFile.html > newFile
または
sed -e "s@$dayMaxInNew@$dayMaxIn@g" \
-e "s@$dayAvgInNew@$dayAvgIn@g" \
-e "s@$dayCurInNew@$dayCurIn@g" < ../oldFile.html > newFile