哪个 sed 版本不是 GNU sed 4.0?

12 version sed busybox

我想弄清楚sed我在 BusyBox 1.18.3 上有哪个版本。该--version输出是神秘的。

$ sed --version
This is not GNU sed version 4.0
Run Code Online (Sandbox Code Playgroud)

以下代码来自相关sed.c.

    /* Lie to autoconf when it starts asking stupid questions. */
if (argv[1] && !strcmp(argv[1], "--version")) {
    puts("This is not GNU sed version 4.0");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是标题:

/*
 * sed.c - very minimalist version of sed
 *
 * Copyright (C) 1999,2000,2001 by Lineo, inc. and Mark Whitley
 * Copyright (C) 1999,2000,2001 by Mark Whitley <markw@codepoet.org>
 * Copyright (C) 2002  Matt Kraai
 * Copyright (C) 2003 by Glenn McGrath
 * Copyright (C) 2003,2004 by Rob Landley <rob@landley.net>
 *
 * MAINTAINER: Rob Landley <rob@landley.net>
 *
 * Licensed under GPLv2, see file LICENSE in this source tree.
 */
Run Code Online (Sandbox Code Playgroud)

还有一个“此版本 sed 中支持的功能和命令”的列表。它看起来很特别sed,但它有什么特别之处呢?它是为 BusyBox 定制的,还是来自其他来源?

我应该如何引用这个sed,例如在 SE 问题中?

Gil*_*il' 8

BusyBoxsed并不真正支持--version. 正如注释所示,输出用于配置脚本,而不是用于人类。(它以一种相当愚蠢的方式让人类感到困惑!)将其描述为 BusyBox sed 表示Busybox 版本(通过 获得busybox | head -n 1)。

一些 BusyBox 命令具有可选功能,并且没有通用的方法来查找编译了哪些命令。sed没有任何方法。

至于为什么 BusyBox sed 报告说它不是 GNU sed,关键在于它试图冒充 GNU sed,因为它具有足够的兼容性。一些配置脚本寻找 string GNU sed version nnn,这样 BusyBox sed 是可以接受的。具体来说,GNU libc 的配置脚本需要“用装满碎玻璃和生锈钉子的火箭筒[射击] 头部”(© Rob Landley)。