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;

위 명령은 string 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.

관련 정보