wコマンドまたはフラグが実行されていない場合、sedはファイルを生成できますか?

wコマンドまたはフラグが実行されていない場合、sedはファイルを生成できますか?

ちょうど私が実行すると

echo foo|sed 's/x/u/w/tmp/bar'

GNUを使用するとsed空のファイルが生成されます。/tmp/barこれはwフラグが適用されないため、意図しない現象です。悪い、

echo foo|sed 'd;w/tmp/bar'

その空のファイルも作成されました!うふ。

本当に、GNUsedマニュアル認める:

最初の入力行を読み取る前にファイルが作成または切り捨てられます。

すべてのファイルハンドルが開いているかどうかをテストする必要がない場合は、実装が簡単になりそうですが、POSIX定義ではコマンドを実行せずにファイルに触れることsedはできません。--posixGNUに切り替えてもsed役に立ちませんでした。

sedこの場合、他の実装がどのように機能するかを知っていますか?

それとも、私はここで基準を誤って理解していますか?

答え1

sedGNU実装は、コマンド処理wとコマンドwフラグに関するPOSIX仕様に厳密に従いますs。次の内容は、以下から取得したものです。sedユーティリティPOSIX仕様の詳細な説明セクション:

仕事文書処理が開始される前に作成する必要があります。

w「wfile」は、wコマンドまたはコマンドのフラグで作成されたファイルですs

FreeBSD、macOS、OpenBSD、およびNetBSDのBSD実装には、「wfile」が作成されるまで作成または切り捨てを遅らせるsed非標準オプションがあります。-a

-a
wデフォルトでは、関数引数としてリストされたファイルは、処理が開始される前に作成または切り捨てられます。この-aオプションを使用すると、sed関連機能を含むコマンドがw入力ラインに適用されるまで各ファイルを開くのに遅延が発生します。

関連情報