1

ワイルド文字を使用して検索および置換するためのワンライナーソリューションを探しています..

入力:

>sequence1
ATGCCAAACTGGAACT[A/T]ATTCAATGGCATGGACATAAATTC[A/C]ATACAATTACAAA
>sequnce2
ATCAAACCGGTATGTACATT[A,T/G]ATTCATTACTA

出力:

>sequence1
ATGCCAAACTGGAACTNATTCAATGGCATGGACATAAATTCNATACAATTACAAA
>sequnce2
ATCAAACCGGTATGTACATTNATTCATTACTA

「[」と「]」の間のすべてを「N」に置き換える必要があります。データ長は異なる場合があります。awk スクリプトを使用してパターンを見つけることができましたが、それを置き換える方法がわかりません。助けてください..

awk -F'[][]' '{for(i=2;i<=NF;i=i+2) print $i}' 1.fasta

私が試した別のことはviエディタです

:%s/[.*\]/N/g

上記のものを使用して、「[A/T]ATTCAATGGCATGGACATAAATTC[A/C]」をすべてNに置き換えます

4

4 に答える 4

4

これをやってみてください:

perl -pe 's/\[.*?\]/N/g' file.txt

EXPLANATIONS (正規表現について)

  • s///基本的な置換スケルトン(perlまたはsed) :s/before/after/
  • s///g:g最後の修飾子は、すべての出現を意味します
  • \[: は : リテラル[(または代わりにバックスラッシュが付いたもの) を意味します
  • .: 意味 :任意の文字
  • *意味: 0 または N 文字
  • ?最後の正規表現が欲張りモードではないことを伝える

そうは言っても、私は別の面白い解決策を持っています:

perl -ne 'print join "N", split /\[.*?\]/;' file.txt

たぶん、このようにもっと明確ですか?(でも相変わらず)

perl -ne '
    print join(
        "N",
        split(/\[.*?\]/)
    );
' file.txt
于 2012-11-30T19:30:25.080 に答える
0

これは vi エディターで機能します。

%s/\[[^\]]*\]/N/g
于 2012-12-04T12:44:26.113 に答える
0
sed 's/\[[^]]*\]/N/g' file

編集:要求に応じて説明:

リテラル "[" ([) を探し、0 個以上の非 "]" 文字 ([^]]*) の任意のシーケンスとそれに続くリテラル "]" (]) を探し、その文字列全体を文字 N に置き換えます。各行でローカルに「g」を実行します。

于 2012-11-30T19:25:33.653 に答える
0

別の awk ワンライナーを追加するだけです。あなたの目標は交代です。$x で遊ぶ必要はありません

awk '{gsub(/\[[^\]]*\]/,"N")}1' file
于 2012-11-30T22:33:28.220 に答える