特定の行でスペースを_に置き換える方法

特定の行でスペースを_に置き換える方法

複数の段落を含むテキストファイルがあります。各段落には空白のタイトルがあります。[との間:のテキストスペースをに変更したいと思います_。以下は、私が言うファイルから抜粋したテキストです。

[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

おすすめ記事