0

こんにちは、2 種類の行を持つ大きなファイルがあります。1 つは で終わり、もう 1 つは で終わり.1ます.2。今、私はすべてのものを除外する必要があり.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

2*これは、必要な数の 2 が存在する可能性があることを意味します-2 は含まれません!

正規表現をもう少し正確にすることをお勧めします。または、フィルタリングしたくないものをフィルタリングすることもできます。

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

したがって、次のことが必要です。

  • ^-- 行頭から見て、
  • >-- 正確に 1 つの ">" 文字、
  • \w{9}-- 正確に 9 文字または数字またはアンダースコア
  • .-- 正確に 1 つのドット
  • 2-- 数字「2」。

引数-Eは拡張正規表現を意味するため、必要に応じて\wand{9}が機能します。

于 2013-10-01T23:22:15.143 に答える
1

あなたのファイルは列ベースのようです。awk正規表現を使用して最初の列を照合することもできます。

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