Sed - 改行文字を含むパターンと一致しますが除外します。

Sed - 改行文字を含むパターンと一致しますが除外します。

複数のfasta形式の入力があります。基本的に:

>header1
AAAAAATTTTCCCCGGGG
AAAATGTGTGTCTCTCTC
ATAGGATGAGT
>header2
GGGGTGTGTGATGTAGTA
AAAATGTGTGTCTCTCTC
ATAGGATGAGT
....
>header720
GGGGTGCTCGCTCTGTGA
AAAATGAGTCATCATTGT
ATAGGATGAGT

次の形式でアイテム#28を回復したいと思います。

>header28
GGGGTGCTCGCTCTGTGA
AAAATGAGTCATCATTGT
ATAGGATGAGT

私の最初の試みはsedを使用することでした。ただし、 sed -n '/header28/,/>/p'(「パターンに一致する行から次の記号までのすべての項目をインポートする」)、結果は次のようになります。

>header28
GGGGTGCTCGCTCTGTGA
AAAATGAGTCATCATTGT
ATAGGATGAGT
>header29

またsed -n '/header28/,/[^>]*/p'、(「記号を含まずにパターンに一致する行からすべての項目を取得します。」)は、次のように改行文字にかかるため、必要なものよりも短いシーケンスを生成します。

>header28
GGGGTGCTCGCTCTGTGA

さらに、これらのオプションのどれも、項目がリストの最後の項目である可能性を処理しません(したがって、他の>は後にありません)。不可能で耐えることができますが、それを処理するコードもあれば良いでしょう。

助けてくれてありがとう! sed以外に他のオプションも開いていますが、私は単純なことを目指していると思います。

ベストアンサー1

おそらくこれはすでに要求されているでしょう...しかし、とにかく範囲の終わりがある場合は削除してください。

sed  '/>header28/,/>/!d;/>/{
     />header28/!d
     }' infile

おすすめ記事