sedと「>」の混乱

sedと「>」の混乱

次のコマンドはうまく機能します。

sed s/input/raw_input/ p.py >p2.py && mv p2.py p.py

ただし、次のコマンドはp.pyを空のファイルに変換します。

sed s/input/raw_input/ p.py >p.py

また、p.pyを空のファイルに変換します。

sed s/input/raw_input/ p.py | cat > p.py

最後の2つのコマンドが期待どおりに機能しないのはなぜですか?特にp.pyが空の理由は何ですか?

答え1

これは、リダイレクト演算子が>コマンドの前に呼び出され、次の順序が発生するためです。

  1. p.py書き込み用に開き、前の内容をすべて切り捨てます。
  2. sedp.pyこれで、空のコマンドを実行するために呼び出されます。
  3. 出力(何もなし)が記録されますp.py(まだ何も含まれていません)。

コードの移植性を望む程度に応じて、2つのオプションがあります。

ポータブルではありません

GNUオプションを使用したsed -i内部編集

持ち運べる

出力を一時ファイルにリダイレクトし、sed完了したら一時ファイルを元のファイルの上に移動します。

関連情報