打印包含以某个给定字符串开头的行的段落

打印包含以某个给定字符串开头的行的段落

我的输入文件如下,其中记录由空行分隔。我需要打印xx行首的记录(段落) 。

cat in.txt
a cfg
b hfh
c gfh
xx jhl
d kjl

a opi
b ghj
c tyu
yy xxx
d ghj

a xxx
b fgk
c ghf
z zxx
d ghj

我的预期输出是:

a cfg
b hfh
c gfh
xx jhl
d kjl

我尝试了下面的命令,但它不起作用:

awk -v RS='' -v ORS='\n\n' "/^XX/" in.txt

^在这种情况下不起作用

答案1

使用以下方法更容易perl

perl -00 -ne 'print if /^xx/m' in.txt

m标志启用多行模式,^不仅$在记录的开头和结尾匹配,而且在记录内每行的开头和结尾匹配。

使用awk,您始终可以执行以下操作:

awk -v RS='' -v ORS='\n\n' '/(^|\n)xx/' in.txt 

即,匹配记录开头 ( ^),或|换行符 ( \n) 后的 ( )。

相关内容