sed 命令替换部分中“,$d”的含义

lps*_*lps 4 sed

我在我正在从事的项目中遇到了这个命令:

sed -i '/regex/,$d' file

我不明白这,$d部分是如何工作的。如果我省略任何部分,,$d我就会出错。在我的测试中,它看起来像什么都没有替换匹配的行和它之后的任何内容。例子:

包含内容的文件:

first line 
second line regex
third line
fourth line
Run Code Online (Sandbox Code Playgroud)

运行该命令后出现:

first line
Run Code Online (Sandbox Code Playgroud)

我在手册页中找不到任何解释这一点的文档,尽管我很容易错过它。手册页对我来说很难解析......

这是使用GNU Sed v 4.2.2.

tri*_*eee 9

这不是替换命令;在sed 替代替换命令的模样s/from/to/

sed脚本的一般形式是一系列命令——通常是单个字母,但其中一些s带有参数,如上面的命令——在每个命令之前都有一个可选的地址表达式。您正在查看地址表达式前面的d (删除行)命令/regex/,$

地址范围指定从第一个正则表达式匹配到文件末尾的行($在此上下文中指定最后一行)并且操作d删除指定的行。

尽管许多人只遇到过仅sed使用s命令的简单脚本,但在 的任何基本介绍sed以及手册页中都会描述这种行为。