ちょうど私が実行すると
echo foo|sed 's/x/u/w/tmp/bar'
GNUを使用するとsed
空のファイルが生成されます。/tmp/bar
これはw
フラグが適用されないため、意図しない現象です。悪い、
echo foo|sed 'd;w/tmp/bar'
その空のファイルも作成されました!うふ。
本当に、GNUsed
マニュアル認める:
最初の入力行を読み取る前にファイルが作成または切り捨てられます。
すべてのファイルハンドルが開いているかどうかをテストする必要がない場合は、実装が簡単になりそうですが、POSIX定義ではコマンドを実行せずにファイルに触れることsed
はできません。--posix
GNUに切り替えてもsed
役に立ちませんでした。
sed
この場合、他の実装がどのように機能するかを知っていますか?
それとも、私はここで基準を誤って理解していますか?
答え1
sed
GNU実装は、コマンド処理w
とコマンドw
フラグに関するPOSIX仕様に厳密に従いますs
。次の内容は、以下から取得したものです。sed
ユーティリティPOSIX仕様の詳細な説明セクション:
各仕事文書処理が開始される前に作成する必要があります。
w
「wfile」は、w
コマンドまたはコマンドのフラグで作成されたファイルですs
。
FreeBSD、macOS、OpenBSD、およびNetBSDのBSD実装には、「wfile」が作成されるまで作成または切り捨てを遅らせるsed
非標準オプションがあります。-a
-a
w
デフォルトでは、関数引数としてリストされたファイルは、処理が開始される前に作成または切り捨てられます。この-a
オプションを使用すると、sed
関連機能を含むコマンドがw
入力ラインに適用されるまで各ファイルを開くのに遅延が発生します。