$ cd /tmp
$ echo bar > foo
$ cat foo
bar
$ cat foo | sed 's/bar/qux/'
qux
$ cat foo | sed 's/bar/qux/' > foo
$ cat foo
最後に、cat foo
ファイルの内容が削除されたことを示します。なぜそんなことですか?
答え1
I / Oリダイレクトは、> foo
コマンドを実行する前にシェルによって処理されます。シェルは書き込みfoo
用にファイルを開き、前の内容を消去してからコマンドを実行します。あなたの場合はcat foo | sed 's/bar/qux/'
空のファイルが使用されるため、foo
何の効果もありません。