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).

貢獻者指南