`sed` 是否存在于所有 *nix 中?

use*_*617 5 sed portability

我的应用程序将在所有版本的基于 Unix 的操作系统上运行,例如 Linux、MacOS、HP-UX、Sun Solaris、OSX 等。

sed在一个常见的地方使用以下命令来删除文本文件中匹配的字符串:

sed -i '/string1/d' mytextfile
Run Code Online (Sandbox Code Playgroud)

这会在所有 *nixes 中工作吗?

Mic*_*mer 10

是的,sed适用于所有 Unix 版本。它是POSIX 标准的一部分:每个“官方”Unix 都包含它,所有 Linux 和 BSD 发行版也包含它。

sed命令有多个不同版本,具有不同的扩展名。如果您坚持使用 POSIX 描述sed选项和语言的通用子集,那么您的命令将适用于所有系统。


fkr*_*iem 7

POSIX 没有强制要求,sed -i因为它是多余的,也不符合sed. sed最初是为了编辑(因此它的名称为stream itor ed),而不是文件。POSIX 中以非交互方式编辑文件的正确工具是ed

printf "/text/d\nw" | ed file.txt
Run Code Online (Sandbox Code Playgroud)

可悲的是,许多当前的系统认为ed已经过时并且默认情况下不提供它,即使它是由 POSIX 强制要求的......但至少它应该可以轻松安装在大多数系统上(不像 GNU sed,它可能需要从源代码编译代码)。

编辑:此外,与问题的措辞所暗示的相反,d命令的(s)ed作用不仅仅是删除给定的字符串,它还删除包含它的任何行。