它在sed中被称为{//!p;}的含义是什么?

时间:2018-03-22 13:40:58

标签: bash sed scripting

我正在寻找一个sed命令,它可以打印模式匹配旁边的行,直到文件末尾。

不知怎的,我得到了这个命令:

sed -n '/pattern match/,${//!p;}' Readme

这确实解决了目的,但我不理解{//!p;}。它叫什么或用于什么?

因此,如果我想根据不同的场景而不是只有具有该模式的行跳过多行,我应该能够这样做。

我知道有不同的命令可以解决这个问题; grep,awk是最接近的。但我想了解这种方法。

也很抱歉问题的标题,因为我无法更好地了解如何提出此问题。

1 个答案:

答案 0 :(得分:4)

根据manual

的空正则表达式//
  

重复上一个正则表达式匹配(如果将空正则表达式传递给s命令,则相同)

所以命令

sed -n '/pattern match/,${//!p;}'

采用地址范围:从匹配/pattern match/的第一次出现到文件末尾($)。对于此范围内的每一行,运行//!p;这相当于/pattern match/!p,如上所述,即"如果该行与/pattern match/不匹配,则打印它"。

因此,complete命令打印从第一次出现的模式到最后一行的所有行,但是禁止匹配的行。文件

line 1
line 2
pattern match
line 4
pattern match
line 6

会变成

line 4
line 6