uso sed do shell do Android

uso sed do shell do Android

Estou me familiarizando com o sed na emulação de terminal Android: a versão que estou usando sedincluída na toybox que está instalada no meu dispositivo Sony sem root. sed --version(ou toybox sed --version) fornece o mesmo resultado:

Este não é o GNU sed 9.00

Agora, li o manual específico do toybox sed e tentei alguns liners simples (a ideia é incluí-los em scripts que eu poderia iniciar manualmente). Agora, a primeira coisa que notei é que se eu tentar incluir o script entre colchetes simples (es sed -e 's/foo/bar/' file), isso não será interpretado corretamente.

O comando funciona usando colchetes duplos, mas estou tendo problemas com a forma como os scripts são interpretados (ou talvez esteja fazendo coisas erradas). Exemplo. Tento substituir uma palavra dentro de um arquivo. O arquivo é uma string "stringa di test", que pretendo converter em "stringa di prova". O resultado é que a string é substituída, mas a string anterior é anexada ao restante da linha:

user:$ ls
 file.txt
 n.sh
 s.sh
 save
 script_gian.sh
 sed_script
user: $ cat file.txt
 stringa di test
user:$sed -i -e "s/test/prova/g" file.txt                        <
 ^C1|user:$ cat file.txt
stringa di test
user:$  sed -r -e "s/test/prova/1" file.txt > f.txt                <
user:$ ls
 f.txt
 file.txt
 file.txtFD4OVI
 n.sh
 s.sh
 save
 script_gian.sh
 sed_script
user:$ cat f.txt
stringa di provastringa di test
user:$ cat file.txt
 stringa di test
user: $

Outra coisa interessante é que tentar usar o sinalizador g (global) resulta no desligamento do sed e na necessidade de ser interrompido com CONTROL C. O comando -i também resulta no desligamento do sed.

Também tentei canalizar uma string para sed com:

cat file.txt | sed -e "s/foo/bar/" > newfile.txt

Mas o resultado é exatamente o mesmo. A palavra dentro da string é substituída, e a linha como estava antes da substituição é anexada logo após isso (isso também exclui os caracteres restantes da linha) - Estou usando sedincorretamente ou há algo na versão que sedestou tentando usar?

Responder1

Eu poderia ter confirmado (graças ao canal irc #toybox) que o problema era de fato um bug no toybox sed, que deveria ter sido resolvido, mas o Android M ainda vem com uma versão desatualizada do toybox. Estes são os links para a lista de discussão da toybox (que, infelizmente, eu perdi) onde os assuntos foram discutidos:

http://lists.landley.net/pipermail/toybox-landley.net/2016-January/007897.html

http://lists.landley.net/pipermail/toybox-landley.net/2015-September/004415.html

Que pena, terei que esperar por uma versão atual do toybox com uma futura atualização do Android.

informação relacionada