Se o sed não for obrigatório, usar Ruby pode ser uma alternativa. O intérprete Ruby,, ruby
pode ser usado como sed e awk, executando-o com a -n
opção que faz iterar sobre sua entrada. O intérprete pode então ser alimentado com uma linha única do Ruby, adicionando-o como argumento à -e
opção (que instrui o intérprete a interpretar o argumento, em -e
vez de procurar um script em um arquivo).
Para esse problema específico, você pode usar a seguinte linha única (adaptada de /programming//a/3184271/789593 ):
ruby -ne 'puts $_.scan(/.{3}|.+/).join("+")'
Em linguagem simples,
- corresponde a 3 caracteres ou pelo menos um caractere,
scan(/.{3}|.+/)
na sequência de entrada $_
(nesse caso, espera-se que a entrada seja padrão) e coloca cada correspondência em uma matriz,
- une a matriz a uma string com um '+' conectando cada elemento
join("+")
,
- e imprime terminado por uma nova linha
puts
.
Por exemplo
echo "AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUG" | ruby -ne 'puts $_.scan(/.{3}|.+/).join("+")'
AUG+GCC+AUG+GCG+CCC+AGA+ACU+GAG+AUC+AAU+AGU+ACC+CGU+AUU+AAC+GGG+UG
Observe que ele não adiciona nenhum '+' à direita.