아래와 같은 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