我有一个包含如下条目的文件:
chr1 740678 740720
chr1 2917480 2917507
我想删除以 or 开头的条目chr1
,但保留以chr11
or开头的条目chr19
,依此类推。当我使用它时grep -v "chr1"
,它会删除以 chr11 或 chr19 开头的其他内容。我可以使用其他正则表达式吗?
答案1
首先,您应该将正则表达式锚定为仅匹配行的开头 ( ^chr1
),以避免查找包含chr1
但不是第一个字符串的行(例如,在带注释的 VCF 文件中很容易发生这种情况)。接下来,您可以使用-w
(GNU) 的选项grep
:
-w, --word-regexp
Select only those lines containing matches that
form whole words. The test is that the matching
substring must either be at the beginning of the
line, or preceded by a non-word constituent
character. Similarly, it must be either at the end
of the line or followed by a non-word constituent
character. Word-constituent characters are
letters, digits, and the underscore. This option
has no effect if -x is also specified.
如果你grep
不支持,那么使用这个:
grep -v '^chr1\s' file
匹配\s
空白(包括制表符和空格),因此将排除任何以空白字符开头的行chr1
,然后是任何类型的空白字符。
答案2
看起来 chr1 后面有一些空格或制表符。因此,您可以搜索chr1
,后面跟着一些空格字符。尝试这个:
grep -v "chr1\s\+"