複数の段落を含むテキストファイルがあります。各段落には空白のタイトルがあります。[
との間:
のテキストスペースをに変更したいと思います_
。以下は、私が言うファイルから抜粋したテキストです。
[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
1つの方法は、最初のコロンの前にスペースがなくなるまで、一度にスペースを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