我有一个这种格式的大文件:
Sequence
xxxxx 12 161
xxxxx 54 148
Sequence
hhhhh 4 110
gsgsgs 8 88
Sequence
jjjjj 1 45
skskkak 5 8
依旧...... 我只想要一个带有“序列”之后的第一个完整行的文件(请注意,在该单词后面有一个空格)。那就是:
xxxxx 12 161
hhhhh 4 110
jjjjj 1 45
请帮忙吗?我想用awk做的,但我不经常使用,所以我有点迷失正则表达式...
答案 0 :(得分:1)
Sed
解决方案就像
$ sed -n '/Sequence/{n;n;p}' test
xxxxx 12 161
hhhhh 4 110
jjjjj 1 45
如果您想要 awk
,可以尝试
$ awk '/Sequence/{getline; getline; print}' test
xxxxx 12 161
hhhhh 4 110
jjjjj 1 45
或强>
短得多
awk '/Sequence/{x=NR+2}NR==x'
感谢Jidder的建议
答案 1 :(得分:1)
您可以使用'^(?=Sequence).*\n+^$\n+\K(^.*$)'
模式来匹配这些文字。
$ grep -Pzo '^(?=Sequence).*\n+^$\n+\K(^.*$)' file.txt
xxxxx 12 161
hhhhh 4 110
jjjjj 1 45
此处\K
导致前面的模式匹配而不打印它。
您可以实时查看here
答案 2 :(得分:0)
您可以在awk
awk '/Sequence/{f=1;next}f==1&&NF>0{f=0;print}'
/Sequence/{f=1;next}
设置标记/Sequence/
相匹配的行上f
并跳到下一行f==1&&NR>0{f=0;print}
上的f
并打印行答案 3 :(得分:-1)