sed 명령에 숫자를 지정해야 합니다.

sed 명령에 숫자를 지정해야 합니다.

아래와 같은 fasta 파일이 있습니다.

>accessory/4745/24/lake_sample_pv_strain_LH201_chromosome_Gene2509
ATGCTAG
>accessory/95/89.78/lake_sample_pv_strain_LH201_Gene125
TAGTCT

fasta 헤더에서 문자를 제거 해야 하므로 accessory/numericals/numericals/다음 명령을 사용했지만 목적을 달성하지 못했습니다.

sed 's/accessory[/][0-9][/][0-9]//g' accessory.fasta

예상 출력은 다음과 같습니다.

>lake_sample_pv_strain_LH201_chromosome_Gene2509
ATGCTAG
>lake_sample_pv_strain_LH201_Gene125
TAGTCT

이 문제를 해결하도록 도와주세요. 미리 감사드립니다.

답변1

accessory/귀하의 정규식은 " 다음 을 찾고 있습니다.숫자( [0-9]) 뒤에 /"가 있으면 파일에 표시되지 않습니다. 검색하려는 항목은 다음과 같습니다.하나 이상의 숫자., 그리고 숫자가 아니도록 허용하려고 합니다 . 따라서 원본과 동일한 논리를 사용하면 다음과 같은 것을 원할 것입니다.

$ sed -E 's/accessory[/][0-9.]+[/][0-9.]+[/]//' accessory.fasta
>lake_sample_pv_strain_LH201_chromosome_Gene2509
ATGCTAG
>lake_sample_pv_strain_LH201_Gene125
TAGTCT

g한 줄에 하나의 일치 항목만 있으므로 여기서는 수정자를 사용하지 않았으므로 수정자를 사용하지 않았습니다 .

그러나 이는 불필요한 제한이다. 파일이 귀하의 파일처럼 보이면 마지막 줄까지 모든 것을 삭제하면 됩니다 /.

$ sed -E 's|>.*/|>|' accessory.fasta 
>lake_sample_pv_strain_LH201_chromosome_Gene2509
ATGCTAG
>lake_sample_pv_strain_LH201_Gene125
TAGTCT

s///연산자는 모든 문자를 구분 기호로 사용할 수 있습니다. 이제 일치해야 한다는 것을 알았으므로 탈출할 필요가 /없습니다 .s|||/

원본처럼 제한해야 하는 경우 다음과 같이 단순화할 수 있습니다.

$ sed -E 's|accessory/[0-9.]+/[0-9.]+/||' accessory.fasta 
>lake_sample_pv_strain_LH201_chromosome_Gene2509
ATGCTAG
>lake_sample_pv_strain_LH201_Gene125
TAGTCT

관련 정보