有人可以解释一下删除文件顶部所有前导空行的代码:
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删除选定的行。