我的应用程序将在基于 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
原本是为了编辑溪流(因此它的名字是s
tream ed
itor),而不是文件。 POSIX 中以非交互方式编辑文件的正确工具是ed
printf "/text/d\nw" | ed file.txt
遗憾的是,许多当前的系统认为ed
它已经过时,并且默认情况下不提供它,即使它是 POSIX 强制要求的......但至少它应该可以轻松安装在大多数系统上(与 GNU sed 不同,它可能需要从源代码进行编译代码)。
编辑:另外,与问题的措辞所暗示的相反,命令d
的作用(s)ed
不仅仅是删除给定的字符串,它还删除包含该字符串的任何行。