uutils/sed

Add `W` command (write first line of pattern space)

Open

#398 创建于 2026年4月30日

在 GitHub 查看
 (0 评论) (0 反应) (0 负责人)Rust (23 fork)github user discovery
good first issue

仓库指标

Star
 (91 star)
PR 合并指标
 (平均合并 6天 9小时) (30 天内合并 25 个 PR)

描述

Bug

The GNU W command — write only the first line of the pattern space (up to the first embedded \n) to a file — is not implemented. It is the partial-write counterpart to w.

Reproduction

$ printf "abc\ndef\n" | /usr/bin/sed -n 'N;W/dev/stdout'
abc

$ printf "abc\ndef\n" | ./target/release/sed -n 'N;W/dev/stdout'
sed: <script argument 1>:1:3: error: invalid command code `W'

What it should do

From the GNU manual:

W FILENAME Write to the given filename the portion of the pattern space up to the first newline.

Same filename-parsing as w. Opens the file once, appends each invocation. Honors --sandbox rejection (already plumbed for w).

Suspected place to add it

src/sed/compiler.rs:1276get_cmd_spec. Add:

'W' => Ok(CommandSpec {
    n_addr: 2,
    handler: compile_write_file_command,   // same parser as 'w'
}),

In the execution path (search for the w case in processor.rs), write only the bytes up to the first \n instead of the whole pattern space.

Affected GNU testsuite tests

missing-filename, sandbox (both also test W rejection paths).

贡献者指南