uso de sed desde el shell de Android

uso de sed desde el shell de Android

Me estoy familiarizando con sed en la emulación de terminal Android: la versión que estoy usando se sedincluye en toybox y está instalada en mi dispositivo Sony no rooteado. sed --version(o toybox sed --version) da el mismo resultado:

Esto no es GNU sed 9.00

Ahora, leí el manual específico de toybox sed y probé algunas frases sencillas (la idea es incluirlas en scripts que pueda ejecutar manualmente). Ahora, lo primero que noté es que si intento incluir el script entre corchetes simples (archivo es sed -e 's/foo/bar/'), esto no se interpreta correctamente.

El comando funciona usando corchetes dobles, pero tengo problemas con la forma en que se interpretan los scripts (o tal vez estoy haciendo las cosas mal). Ejemplo. Intento sustituir una palabra dentro de un archivo. El archivo es una cadena "stringa di test", que pretendo convertir en "stringa di prova". El resultado es que la cadena se sustituye, pero la cadena anterior se adjunta al resto de la línea:

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: $

Otra cosa interesante es que intentar usar la bandera g (global) da como resultado que sed cuelgue y tenga que ser interrumpido con CONTROL C. El comando -i también resulta en que sed cuelgue.

También intenté canalizar una cadena para sed con:

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

Pero el resultado es exactamente el mismo. La palabra dentro de la cadena se sustituye y la línea tal como estaba antes de la sustitución se agrega justo después de esto (esto también elimina los caracteres restantes en la línea). ¿Estoy usando sedincorrectamente o hay algo en la versión que sedestoy intentando? ¿usar?

Respuesta1

Podría confirmar (gracias al canal irc #toybox) que el problema era de hecho un error en toybox sed, que se suponía que se había resuelto, pero Android M todavía viene con una versión desactualizada de toybox. Estos son los enlaces a la lista de correo de toybox (que lamentablemente me había perdido) donde se discutieron los problemas:

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

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

Lástima, tendré que esperar a una versión actual de toybox con una futura actualización de Android.

información relacionada