Eu certamente esperaria que o comando echo 'a' | sed 's/a/b/'
imprimisse b
por conta própria, e não imprima b a
como seu exemplo.
De fato, quando executo esse comando no Android adb shell
mais próximo, obtenho o resultado esperado:
$ adb shell
android:/ $ echo 'a' | sed 's/a/b/'
b
Este é um dispositivo diferente do seu (consulte a referência abaixo para versões específicas).
Não consigo pensar no que geraria a saída b a
(substituto, espaço, original). Antes de ficar muito profundo, certifique-se de que isso é o que realmente está vendo - digite o comando inteiro exatamente como está escrito, chave por tecla (sem colar).
Se realmente está gerando essa saída, eu só posso imaginar isso vindo de um bug presente no seu sistema. Mas qual bug e onde?
Reduzindo o problema
Primeiro, verifique se o pipeline do seu shell está funcionando conforme o esperado. Tente canalizar um comando simples sem argumentos para outro comando simples sem argumentos, por exemplo env | head
.
Se você trocar seu sed por tr a b
ou mesmo head
, saberá se é especificamente um problema com sed
.
Você também pode tentar sed
fora do pipeline. Execute sed
sozinho como um comando interativo e digite input (como a ) nele. Pressione Ctrl-D quando terminar para sinalizar o fim do arquivo.
Um ambiente de trabalho
O shell é o MirBSD KSH ( mksh
), sed
é o comando sed do Toybox.
$ adb shell
android:/ $ sed --version
This is not GNU sed version 9.0
android:/ $ type sed
sed is a tracked alias for /system/bin/sed
android:/ $ ls -l /system/bin/sed
lrwxr-xr-x 1 root shell 6 2009-01-01 17:00 /system/bin/sed -> toybox
$ toybox --version
0.7.0-a324bde36bd6-android
$ echo $KSH_VERSION
@(#)MIRBSD KSH R52 2016/01/20