O que você está tentando alcançar é realmente possível, mas apenas com o GNU sed, usando o comando e . Então, se você não se importa com possíveis problemas de portabilidade, experimente.
Por exemplo seu exemplo será parecido com isto:
>echo aaabbdd | sed -e 's/a*/echo 'echo -n & | wc -m'/;e'
3bbdd
se você remover o ; e , verá um comando intermediário (que ajuda a entender por que existem dois ecos)
echo 'echo -n aaa | wc -m'bbdd
Se você quiser substituir várias correspondências, isso pode ser mais complicado, mas ainda pode ser feito encadeando substituições:
>echo aabbaadd | sed -re 's/a+/'echo -n &|wc -m'/g;s/.*/echo &/;e'
2bb2dd
E certamente existem ferramentas melhores para a sua tarefa, como o awk , que possui uma função comprimento () .
Referências:
- Manual do GNU Sed: link
P.S.
Observe também que, se os dados de entrada contiverem citações, você terá que escapar com cuidado ou substituí-los temporariamente (por exemplo, com o comando sedy ///) para que isso funcione.