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

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

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

sed '/./,$!d' file

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

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

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

答案1

sed '/./,$!d'

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

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

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

简而言之:

  • 命令的一般形式sed是[选择器][否定]命令[标志](方括号表示可选部分)

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

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

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

  • 选择器可以选择一行(按数字)或一组行(按正则表达式),或者起始行(按数字或正则表达式)和结束行(按数字或正则表达式)之间的行。

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

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

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

相关内容