我正在寻找一个sed命令,它可以打印模式匹配旁边的行,直到文件末尾。
不知怎的,我得到了这个命令:
sed -n '/pattern match/,${//!p;}' Readme
这确实解决了目的,但我不理解{//!p;}
。它叫什么或用于什么?
因此,如果我想根据不同的场景而不是只有具有该模式的行跳过多行,我应该能够这样做。
我知道有不同的命令可以解决这个问题; grep,awk是最接近的。但我想了解这种方法。
也很抱歉问题的标题,因为我无法更好地了解如何提出此问题。
答案 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