sed 解释:sed '/./,$!d' 文件

Eme*_*ers 9 sed

有人可以解释一下删除文件顶部所有前导空行的代码:

sed '/./,$!d' file
Run Code Online (Sandbox Code Playgroud)

我知道这是一个正则表达式,只匹配第一个字符,但不理解 ,$!d 部分。这是它被取代的东西,还是它们是比赛的选择?

如果它不以“s/”开头,这甚至是搜索命令吗...?

代码来源(来自另一个问题)

Ale*_*exP 12

sed '/./,$!d'
Run Code Online (Sandbox Code Playgroud)

从包含字符(空白与否)的第一行到文件末尾 - 否定(这意味着从文件开头到包含字符的第一行之前的行) - 删除。

这将删除前导行,而不是空行。要删除前导空行(空行或仅包含空格字符的行),请说'/\S/,$!d'.

http://www.grymoire.com/Unix/Sed.html阅读“Sed,介绍和教程” 。然后阅读https://www.gnu.org/software/sed/manual/sed.html 上的参考手册。

简而言之:

  • sed命令的一般形式是[selector][negation]command[flags](方括号表示可选部分)

  • 选择器(如果存在)选择应用命令的行

  • 如果!出现则否定选择器,也就是说,使命令应用于与选择器不匹配的行。

  • 如果不存在选择器,则该命令适用于所有行。

  • 选择器可以选择一行(按编号)或一组行(按正则表达式),或开始行(按编号或正则表达式)和结束行(按编号或正则表达式)之间的行。

  • 在我们的例子中,选择器/./,$意味着找到的第一行匹配/./(即包含至少一个字符)文件末尾($用作行号并表示文件中的最后一行)。

  • 它被 否定!,因此该命令适用于从文件开头到第一行匹配之前的行/./

  • 该命令d删除选定的行。