2012-03-27 10 views
3

私はこれがここなぜsed replace +リダイレクトでファイルが削除されるのですか?

-rw-r--r-- 1 websync www-data 4156 mar 27 12:56 /home/websync/tmp/sitio-oficial/sitios/wp-config.php 

後のファイルは、私が

sed 's/www-test/www/g' /home/websync/tmp/sitio-oficial/sitios/wp-config.php > /home/websync/tmp/sitio-oficial/sitios/wp-config.php 

を実行するコマンドである(GNUがSED)

をbashの中のファイルに2つの文字列を検索および置換するsedを使用しています結果は

-rw-r--r-- 1 websync www-data 0 mar 27 13:05 /home/websync/tmp/sitio-oficial/sitios/wp-config.php 

EDIT: sedの出力をリダイレクトしないと、正しい出力が得られます。新しいファイルにリダイレクトすると、すべて正常に動作します。

答えて

13

これは正常です。このようなパイプラインで同じファイルを読み書きすることはできません。 (これはsed以外のユーティリティでは失敗します)。

ではなく、インプレースフラグ-iを使用します。

sed -i 's/www-test/www/g' /home/websync/tmp/sitio-oficial/sitios/wp-config.php 
+0

ユーティリティ** – jperelli

+0

@jperelli upvoteではなく、受け入れる必要があります:-) – brice

+0

はい、私は5分待っていました、stackoverflowによると。ありがとう! – jperelli

3

sedはストリームとしてファイルを読み取り、ストリームも出力します。あなたのファイルへのリダイレクトを実行すると、その内容は上書きされ、そのファイルはストリームとして読み込まれているので、まだsedによって読み込まれていない。 sedがファイルの読み込みを開始すると、それは空ですので、出力なしで直ちに終了します。

使用-iは、代わりに、インプレース編集を行うには:

sed 's/www-test/www/g' -i /home/websync/tmp/sitio-oficial/sitios/wp-config.php 
2

リダイレクトがそれを切り捨て、出力用のファイルを開きます。これは同時に読み取るためにそれを開くためsedに起こるので、sedは切り捨てられたバージョンを見る。代わりにリダイレクトを使用してのインプレース編集モードをご入力をつかう避けるために、別のファイルへのあなたの出力をリダイレクト、またはsed年代を使用する必要があります。**これは他で失敗することを指摘するために受け入れられ

sed 's/www-test/www/g' -i /home/websync/tmp/sitio-oficial/sitios/wp-config.php

関連する問題