嗨我有大文件有两种行。一个以.1
结尾,另一个以.2
结尾。现在我必须用.2
过滤掉所有的那些。
以下是该文件的前两行。
>AT1G53860.1 | Symbols: | Remorin family protein | chr1:20107165-20109458 REVERSE LENGTH=1329
>AT1G34370.2 | Symbols: STOP1 | C2H2 and C2HC zinc fingers superfamily protein | chr1:12551002-12552501 FORWARD LENGTH=1500
当尝试使用grep -v "\.2*" test.txt > out.txt
时,我得到两条线。我做错了什么?
由于 众议员
答案 0 :(得分:1)
搜索模式中不需要*
。以下应该工作:
grep -v "\.2" test.txt > out.txt
编辑
此外,正如 drahnr 所指出的那样,上面会在行中的任何地方匹配.2
。查看样本输入的特定模式,应仅修改匹配模式以匹配行中第一个单词末尾的.2
。
egrep -v "^>\w+\.2" test.txt > out.txt
答案 1 :(得分:1)
2*
表示可能有两个人想要的人数 - 不包括任何人!
我建议您使用正则表达式更准确一些,或者您可以过滤掉您不想要过滤的内容:
grep -Ev '^>\w{9}\.2' test.txt > out.txt
所以,我们想要:
^
- 从行的开头看,>
- 恰好一个“>”炭,\w{9}
- 正好九个字符或数字或下划线,.
- 正好一个点,2
- 数字“2”。参数-E
表示扩展正则表达式,以便\w
和{9}
可以根据需要运行。
答案 2 :(得分:1)
您的文件似乎是基于列的。您还可以使用awk
正则表达式匹配第一列。
awk '$1!~/\.2$/' file