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