![Newick 형식으로 계통 발생수의 이름 편집 [닫기]](https://linux55.com/image/140472/Newick%20%ED%98%95%EC%8B%9D%EC%9C%BC%EB%A1%9C%20%EA%B3%84%ED%86%B5%20%EB%B0%9C%EC%83%9D%EC%88%98%EC%9D%98%20%EC%9D%B4%EB%A6%84%20%ED%8E%B8%EC%A7%91%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
Newick 형식의 계통발생수가 있는데 분류군 이름의 일부 조각을 제거하고 싶습니다.
1_[genus_specie_1]_characters:0.2654682758,(((((((((((((((2_[genus_specie_2]_characters:0.0379334280,54_[genus_specie_2]_characters:0.0605802067)/1/100:0.0121248674,(3_[genus_specie_3]_characters:0.0206432295,4_[genus_specie_4]_characters:0.0141250479)/1/100:0.0647820408)/1/100:0.0235327264,30_[genus_specie_5]_characters
예를 들어 대괄호 안의 조각을 제거하고 싶습니다.
genus_specie_1:0.2654682758,(((((((((((((((genus_specie_2:0.0379334280,genus_specie_2:0.0605802067)/1/100:0.0121248674,(genus_specie_3:0.0206432295,genus_specie_4:0.0141250479)/1/100:0.0647820408)/1/100:0.0235327264,genus_specie_5
모든 대괄호를 제거하기 위해 라이너 펄을 사용해 보았습니다.
perl -i -pe 'y/[]//d' file.nwk
나는 또한 다음 sed 명령을 시도했습니다
sed 's/[[:alnum:]_]*\[\([[:alnum:]_]*\)\][[:alnum:]_]*/\1/g'
하지만 작동하지 않습니다
답변1
Perl 정규식은 여기서 훌륭하게 작동합니다.
$ initial='1_[genus_specie_1]_characters:0.2654682758,(((((((((((((((2_[genus_specie_2]_characters:0.0379334280,54_[genus_specie_2]_characters:0.0605802067)/1/100:0.0121248674,(3_[genus_specie_3]_characters:0.0206432295,4_[genus_specie_4]_characters:0.0141250479)/1/100:0.0647820408)/1/100:0.0235327264,30_[genus_specie_5]_characters'
$ expected='genus_specie_1:0.2654682758,(((((((((((((((genus_specie_2:0.0379334280,genus_specie_2:0.0605802067)/1/100:0.0121248674,(genus_specie_3:0.0206432295,genus_specie_4:0.0141250479)/1/100:0.0647820408)/1/100:0.0235327264,genus_specie_5'
$ result=$( perl -pe 's/\d+_\[(.+?)\]_.*?(?=:|$)/$1/g' <<<"$initial" )
$ [[ $result = $expected ]] && echo yes
yes
비탐욕적 수량자( .*?
)와 예측( (?=:|$)
)을 사용합니다.