Pra*_*ngh 2 bash scripting sed
我正在寻找一个 sed 命令,它可以打印模式匹配旁边的行直到文件末尾。
不知怎的,我得到了这个命令:
sed -n '/pattern match/,${//!p;}' Readme
Run Code Online (Sandbox Code Playgroud)
这确实解决了目的,但我不明白{//!p;}。它叫什么或者有什么用途?
因此,如果我想根据不同的场景跳过多行,而不仅仅是具有模式的行,我应该能够做到这一点。
我知道有不同的命令可以解决这个目的;grep、awk 是最接近的。但我想了解这种方法。
也对问题的标题感到抱歉,因为我无法更好地了解如何提出此查询。
一个空的正则表达式,//按照手册,
重复最后一个正则表达式匹配(如果将空正则表达式传递给命令,则同样有效
s)
所以命令
sed -n '/pattern match/,${//!p;}'
Run Code Online (Sandbox Code Playgroud)
采用地址范围:从第一次出现匹配的行/pattern match/到文件末尾 ( $)。对于该范围内的每一行,//!p运行;这相当于/pattern match/!p上面的内容,即“如果该行不匹配/pattern match/,则打印它”。
因此,完整命令会打印从模式第一次出现到最后一行的所有行,但会抑制匹配的行。文件
line 1
line 2
pattern match
line 4
pattern match
line 6
Run Code Online (Sandbox Code Playgroud)
会成为
line 4
line 6
Run Code Online (Sandbox Code Playgroud)