Jon*_*ler 35
这听起来像你需要的 sed:
sed -n '/pattern/,/^$/p' file
Run Code Online (Sandbox Code Playgroud)
不要默认打印(-n).对于匹配/pattern/空行的行/^$/,请打印.
Wil*_*ell 22
一个简单的解决方案是
awk '/pattern/' RS= input-file
Run Code Online (Sandbox Code Playgroud)
将RS设置为空字符串使得awk将空行视为记录分隔符,并且简单规则/pattern/使awk打印与模式匹配的任何记录,该记录可以是任何扩展正则表达式.
这是一个(经过测试的)awk解决方案,分为多行以便于阅读:
awk '/pattern/ {do_print=1}
do_print==1 {print}
NF==0 {do_print=0}' input_file
Run Code Online (Sandbox Code Playgroud)
此脚本还将打印空行,以便更容易在视觉上分离不同的匹配块.如果您不想要空白行,请交换2行do_print==1 {print}和NF==0 {do_print=0}
说明:
awk:调用awk工具 - 它按顺序一次评估输入的一行.'...'.:单引号括起来的所有内容都awk作为说明给出.在这种情况下,我们在每一行上执行引用的指令./pattern/ {do_print=1}:每当一行包含" pattern"时,打开do_print标志do_print==1 {print}:如果do_print标志设置为on,则打印当前行.NF==0 {do_print=0}:NF代表字段数.awk默认情况下,用空格和制表符分隔每一行,将一行划分为字段.在这种情况下,空白行没有字段 - 所以do_print当我们看到一行时,我们关闭标志以停止打印NF == 0