所有 *nix 中都存在“sed”吗?

所有 *nix 中都存在“sed”吗?

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

我在常见位置使用以下sed命令来删除文本文件中匹配的字符串:

sed -i '/string1/d' mytextfile

这在所有 *nix 中都有效吗?

答案1

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

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

答案2

POSIX 不强制执行是sed -i因为它是多余的,而且也不符合sed.sed原本是为了编辑溪流(因此它的名字是stream editor),而不是文件。 POSIX 中以非交互方式编辑文件的正确工具是ed

printf "/text/d\nw" | ed file.txt

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

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

相关内容