특정 줄에서 공백을 _로 바꾸는 방법

특정 줄에서 공백을 _로 바꾸는 방법

여러 단락이 포함된 텍스트 파일이 있습니다. 각 단락에는 공백이 있는 제목이 있습니다. [:사이의 텍스트 공백을 으로 바꾸고 싶습니다 _. 다음은 제가 말하는 파일에서 발췌한 텍스트입니다.

[Candidatus Protochlamydia amoebophila UWE25: NC_005861]
MNQRTGILLVNLGTPKTPRPKDVYRYLNEFLTDGRVIDLPWLKRQLLVRC
IIVPFRYKQSSMLYQKLWTAEGSPLLVHGIAVQTKLQMILGESFQVELAM


[Gluconobacter oxydans 621H: NC_006677]
MAFLHKTPRIAPPPEGRTGILLINLGTPDDTGYFSVRRYLSEFLSDRRVI
ESPPLIWQPILQSIILTKRPFASGANYARIWHKEENASPLRVYTRRQAEG

이를 다음과 같이 변경해야 합니다.

[Candidatus_Protochlamydia_amoebophila_UWE25: NC_005861]
MNQRTGILLVNLGTPKTPRPKDVYRYLNEFLTDGRVIDLPWLKRQLLVRC
IIVPFRYKQSSMLYQKLWTAEGSPLLVHGIAVQTKLQMILGESFQVELAM


[Gluconobacter_oxydans_621H: NC_006677]
MAFLHKTPRIAPPPEGRTGILLINLGTPDDTGYFSVRRYLSEFLSDRRVI
ESPPLIWQPILQSIILTKRPFASGANYARIWHKEENASPLRVYTRRQAEG

나는 노력했다

$ sed -e 's/\s\+/_/g' input.txt > output.txt

그러나 이것은 모든 공백을 _ How can I set a maximum on this command? 로 대체합니다.

답변1

한 가지 방법은 첫 번째 콜론 앞에 공백이 더 이상 없을 때까지 한 번에 공백 하나씩 바꾸는 루프를 사용하는 것입니다.

$ sed -e :a -e '/[^:]* [^:]*:/s/ /_/;ta' input.txt 
[Candidatus_Protochlamydia_amoebophila_UWE25: NC_005861]
MNQRTGILLVNLGTPKTPRPKDVYRYLNEFLTDGRVIDLPWLKRQLLVRC
IIVPFRYKQSSMLYQKLWTAEGSPLLVHGIAVQTKLQMILGESFQVELAM


[Gluconobacter_oxydans_621H: NC_006677]
MAFLHKTPRIAPPPEGRTGILLINLGTPDDTGYFSVRRYLSEFLSDRRVI
ESPPLIWQPILQSIILTKRPFASGANYARIWHKEENASPLRVYTRRQAEG

더 많은 KISS 접근 방식은 모든 공백을 바꾼 다음 콜론 뒤의 공백을 다시 바꾸는 것입니다.

sed -e 's/\s\+/_/g' -e 's/:_/: /' input.txt

Perl이 옵션인 경우 다음을 사용할 수 있습니다.부정적인 리뷰앞에 콜론이 오지 않는 인스턴스만 바꿉니다.

perl -pe 's/(?<!:) /_/g' input.txt

관련 정보