具有模式匹配的子集行

时间:2019-03-20 15:29:21

标签: regex bash awk grep

我有一个制表符分隔的文件,其中的列格式如下:

cat    1/1:127:59:0:1    0/0:.:78:0:.,.,.:1    0/0:.:64:0:.,.,.:     
cat    0/0:.:53:0:.,.,.:1    0/1:.:53:0:.,.,.:0    0/0:.:57:0:.,.,.:1
dog    1/0:127:59:0:1    1/1:.:78:0:.,.,.:1    0/0:.:64:0:.,.,.:1

我需要对所有具有一个或多个以“ 1/1:”开头并以“:1”结尾的列的行进行子集化,并给出以下文件:

cat    1/1:127:59:0:1    0/0:.:78:0:.,.,.:1    0/0:.:64:0:.,.,.:0
dog    1/0:127:59:0:1    1/1:.:78:0:.,.,.:1    0/0:.:64:0:.,.,.:1

我曾尝试使用grep和正则表达式,但似乎无法使其正常工作。

任何帮助将不胜感激!

NB。实际文件很大

2 个答案:

答案 0 :(得分:0)

您可以尝试

^.+?\s1\/1.+

请参见a demo on regex101.com

答案 1 :(得分:0)

使用grep的BRE应该是这样的:

grep ' 1/1:[^ ]*:1\( \|$\)' file

您只需要检查一列是否以所需的分隔符开始和结束。

请注意,正则表达式的开头有一个空格。