次のコマンドはうまく機能します。
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
これは、リダイレクト演算子が>
コマンドの前に呼び出され、次の順序が発生するためです。
p.py
書き込み用に開き、前の内容をすべて切り捨てます。sed
p.py
これで、空のコマンドを実行するために呼び出されます。- 出力(何もなし)が記録されます
p.py
(まだ何も含まれていません)。
コードの移植性を望む程度に応じて、2つのオプションがあります。
ポータブルではありません
GNUオプションを使用したsed -i
内部編集
持ち運べる
出力を一時ファイルにリダイレクトし、sed
完了したら一時ファイルを元のファイルの上に移動します。