0

嗨,我有两种行的大文件。一个以 结尾,.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时,我得到了两条线。我究竟做错了什么?

谢谢乌彭德拉

4

3 回答 3

1

您不需要*搜索模式。以下应该工作:

grep -v "\.2" test.txt > out.txt

编辑

此外,正如drahnr所指出的,上面将匹配.2该行中的任何位置。查看示例输入的特定模式,匹配模式应修改为.2仅匹配行中第一个单词的末尾。

egrep -v "^>\w+\.2" test.txt > out.txt
于 2013-10-01T23:17:01.937 回答
1

2*意味着可能有任意数量的两个 -包括一个都没有!

我建议你的正则表达式更精确一点,或者你可以过滤掉你不想过滤的东西:

grep -Ev '^>\w{9}\.2' test.txt > out.txt

所以,我们想要:

  • ^-- 从行首看,
  • >-- 正好是一个 ">" 字符,
  • \w{9}-- 正好九个字符或数字或下划线,
  • .——正好一个点,
  • 2——数字“2”。

该参数-E表示扩展的正则表达式,因此\wand{9}将根据需要工作。

于 2013-10-01T23:22:15.143 回答
1

您的文件似乎是基于列的。您还可以使用awk正则表达式来匹配第一列。

awk '$1!~/\.2$/' file
于 2013-10-01T23:43:25.793 回答