sedと正規表現を使用してパターンを見つけて最後の数文字を削除するにはどうすればよいですか?

sedと正規表現を使用してパターンを見つけて最後の数文字を削除するにはどうすればよいですか?

Parent=gopAga1_...........-R.;パターンがあるすべての行から-R *を削除する必要があるgffファイルがあります。

単一遺伝子のファイル構造を以下に示しますが、ファイル内のすべての遺伝子に対してグローバルな変更を行う必要があります。

>2446   17292   .   +   .   ID=gopAga1_00004497-RA;Parent=gopAga1_00004497;Name=gopAga1_00004497-RA;Alias=augustus_masked-scaffold4362-processed-gene-0.0-mRNA-1;_AED=0.12;_QI=0|0.8|0.81|1|1|1|11|1368|404;_eAED=0.12;Note=Similar to PLAT: Tissue-type plasminogen activator (Pongo abelii);

>scaffold4362   maker   exon    2446    2545    .   +   .   ID=gopAga1_00004497-RA:exon:4045;Parent=gopAga1_00004497-RA;

>scaffold4362   maker   exon    6721    6834    .   +   .   ID=gopAga1_00004497-RA:exon:4046;Parent=gopAga1_00004497-RA;

>scaffold4362   maker   exon    7241    7415    .   +   .   ID=gopAga1_00004497-RA:exon:4047;Parent=gopAga1_00004497-RA;

>scaffold4362   maker   exon    10114   10205   .   +   .   ID=gopAga1_00004497-RA:exon:4048;Parent=gopAga1_00004497-RA;

>scaffold4362   maker   exon    10478   10649   .   +   .   ID=gopAga1_00004497-RA:exon:4049;Parent=gopAga1_00004497-RA;

>scaffold4362   maker   exon    11037   11122   .   +   .   ID=gopAga1_00004497-RA:exon:4050;Parent=gopAga1_00004497-RA;

>scaffold4362   maker   exon    11518   11713   .   +   .   ID=gopAga1_00004497-RA:exon:4051;Parent=gopAga1_00004497-RA;

>scaffold4362   maker   exon    12794   12930   .   +   .   ID=gopAga1_00004497-RA:exon:4052;Parent=gopAga1_00004497-RA;

>scaffold4362   maker   exon    13006   13146   .   +   .   ID=gopAga1_00004497-RA:exon:4053;Parent=gopAga1_00004497-RA;

>scaffold4362   maker   exon    14920   15047   .   +   .   ID=gopAga1_00004497-RA:exon:4054;Parent=gopAga1_00004497-RA;

>scaffold4362   maker   exon    16051   17292   .   +   .   ID=gopAga1_00004497-RA:exon:4055;Parent=gopAga1_00004497-RA;

私はパターンを見つけるためにsedを使用していますが、行の最後の数字とセミコロンの間のすべての内容を削除するためにsedを使用する方法がわかりません。

現在のスクリプトは機能しますか?予想される出力は次のとおりです。

sed 's/Parent=gopAga1_.....-R.;$/Parent=gopAga1.....;/ gop.gff

>2446   17292   .   +   .   ID=gopAga1_00004497-RA;Parent=gopAga1_00004497;Name=gopAga1_00004497-RA;Alias=augustus_masked-scaffold4362-processed-gene-0.0-mRNA-1;_AED=0.12;_QI=0|0.8|0.81|1|1|1|11|1368|404;_eAED=0.12;Note=Similar to PLAT: Tissue-type plasminogen activator (Pongo abelii);

>scaffold4362   maker   exon    2446    2545    .   +   .   ID=gopAga1_00004497-RA:exon:4045;Parent=gopAga1_00004497;

>scaffold4362   maker   exon    6721    6834    .   +   .   ID=gopAga1_00004497-RA:exon:4046;Parent=gopAga1_00004497;

>scaffold4362   maker   exon    7241    7415    .   +   .   ID=gopAga1_00004497-RA:exon:4047;Parent=gopAga1_00004497;

>scaffold4362   maker   exon    10114   10205   .   +   .   ID=gopAga1_00004497-RA:exon:4048;Parent=gopAga1_00004497;

>scaffold4362   maker   exon    10478   10649   .   +   .   ID=gopAga1_00004497-RA:exon:4049;Parent=gopAga1_00004497;

>scaffold4362   maker   exon    11037   11122   .   +   .   ID=gopAga1_00004497-RA:exon:4050;Parent=gopAga1_00004497;

>scaffold4362   maker   exon    11518   11713   .   +   .   ID=gopAga1_00004497-RA:exon:4051;Parent=gopAga1_00004497;

>scaffold4362   maker   exon    12794   12930   .   +   .   ID=gopAga1_00004497-RA:exon:4052;Parent=gopAga1_00004497;

>scaffold4362   maker   exon    13006   13146   .   +   .   ID=gopAga1_00004497-RA:exon:4053;Parent=gopAga1_00004497;

>scaffold4362   maker   exon    14920   15047   .   +   .   ID=gopAga1_00004497-RA:exon:4054;Parent=gopAga1_00004497;

>scaffold4362   maker   exon    16051   17292   .   +   .   ID=gopAga1_00004497-RA:exon:4055;Parent=gopAga1_00004497;

答え1

おそらく:

sed 's/-R[^;]*;$/;/'

または

awk -F ';' -f OFS=';' '{sub(/-R.*/, "",$(NF-1))}; 1'

答え2

$ sed '/^>.*Parent=samp1_/s/-R.;$/;/' <file.fa
>ID=samp1_00004497:4045;Parent=samp1_00004497;
>ID=samp1_00004497:4046;Parent=samp1_00004498;
>ID=samp1_00004497:4047;Parent=samp1_00004499;
>ID=samp1_00004497:4048;Parent=samp1_00004496;

上記のコマンドは文字列sedで始まり、それを含むすべての行を検索し、各行の終わり(単一文字が一致する場所)をに置き換えます。一致で終わらない行は変更されません。>Parent=samp1_-R.;.;-R.;

文字以外の文字を最後まで削除するには、点をに変更します-R.;[^;]*;;

更新された質問の代わりにをParent=gopAga1_使用してくださいParent=samp1_

答え3

コマンドライン

sed -re 's/([^-]+).+?;/\1;/g'

各行の内容全体-(除外)を出力し、-最後にセミコロンを追加します。

修正する

sed -re 's/(_.{8})-R./\1/g'

_thenの8文字に基づいて不要な文字が削除されます-R

関連情報