1

次のようなテキストファイルがあります。

entrez*gene/locuslink:"BRCA2(IV)"|entrez*gene/locuslink:At4g00020@entrez*gene/locuslink:RAD51|entrez*gene /locuslink:At5g20850@
entrez*gene/locuslink:"BRCA2(IV)"|entrez*gene/locuslink:At4g00020@entrez*gene/locuslink:DMC1|entrez*gene/locuslink:At3g22880@

UNIX で perl を使用して : と @ セパレーターの間の単語を抽出したい場合、出力は次のようになります。

At4g00020  At5g20850
At4g00020  At3g22880

やった:

perl -l -ne '/:["At"]([^@]*)/ and print($1,"\t",$2)

あなたの助けを前もって感謝します

トム。

4

3 に答える 3

3

正規表現にはいくつかの問題があります。

まず、[...] は括弧内の文字の 1 つに一致する文字クラスを示します。これは["At"]、文字 '"'、'A'、または 't' のいずれかと一致することを意味します。括弧と二重引用符は省略してください。

次に、複数の一致を収集する必要があります。これは、リスト コンテキストで /g 修飾子を使用して実行できます。

perl -lne '@result = /:At([^@]*)/g; print join("\t", @result)'

最後に、予想される出力に基づいて、At もキャプチャする必要があります。

perl -lne '@result = /:(At[^@]*)/g; print join("\t", @result)'
于 2012-09-12T10:54:45.783 に答える
2

次のようなことを試してください:

perl -l -ne '/:(?=At)([^@]*)/ and print($1,"\t",$2)'
于 2012-09-12T10:50:33.713 に答える
1

これは私のために働く:

perl -l -ne '/:([^:@]*)@.*:([^:@]*)@/ and print($1,"\t",$2)'

を検索し:、セパレータのない文字列が続き、それを@閉じます。

于 2012-09-12T10:50:27.410 に答える