FC2ブログ

[sed] ファイル編集後のファイル保存 (上書き/バックアップ可)

sed では標準入力またはファイル入力による文字列に対して編集を行い、標準出力に結果を出力する。
さらにその出力結果内容をリダイレクトによりファイル保存することが可能。

操作対象ファイルに対する文字列編集後に、
■ 別名ファイルへリダイレクトする分には何も問題は起きない。
例) sed -e "s/before/after/g" target_file > destination_file

■ 同一ファイルへリダイレクト (上書き保存の為) する事は出来ない。
  操作対象ファイル自身が結果的に空ファイルとなる。
  → インライン編集 -i オプション (-i.bak にてバックアップ可) を指定することが必須。
    → もしも操作対象ファイルと同一名ファイルにリダイレクト (上書き) すれば、
      コマンド実行よりも前にリダイレクト処理が成され (この瞬間に対象ファイルと同一名ファイル、
      すなわち操作対象ファイル自身が空ファイルと成り)、
      空となった操作対象ファイルに対して、引き続きコマンドが実行される為、
      空ファイルに対しては何も起こらずコマンドが完了 (標準出力に対する結果出力内容は空) し、
      結果的に空の内容がリダイレクトによりファイル保存される。
      (つまり、操作対象ファイルが空ファイルとなってコマンドが終了)
例)
sed -e "s/before/after/g" target_file > target_file
(×)

(○)
sed -i -e "s/before/after/g" target_file       ・・・ 直接上書き
sed -i.bak -e "s/before/after/g" target_file ・・・ バックアップファイル生成

関連記事
スポンサーサイト



コメント

非公開コメント