Por que o sed só funciona na saída direta do eco?

3

Eu tenho um comando shell para obter o tempo de desenho da interface do usuário para um aplicativo Android (que não é realmente relevante para essa pergunta) em milissegundos. De qualquer forma, a saída se parece com

I/ActivityManager( 1843): Fully drawn com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: [time]

Onde [tempo] tem o formato +###ms ou +#s###ms (novamente, não relevante aqui).

O comando é o seguinte:

adb logcat -d | grep 'Fully drawn' | sed -e 's/^.*: +\(.*\)ms$//' -e 's/s//'

Funciona como esperado quando uso echo para exibir diretamente a saída:

$ echo 'I/ActivityManager( 1843): Fully drawn com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +233ms' | sed -e 's/^.*: +\(.*\)ms$//' -e 's/s//'
> 233

$ echo 'I/ActivityManager( 1843): Fully drawn com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +1s233ms' | sed -e 's/^.*: +\(.*\)ms$//' -e 's/s//'
> 1233

No entanto, quando eu usá-lo em outros comandos que devem exibir uma saída do mesmo formato, sed corresponde à linha inteira e não apenas ao tempo de renderização:

$ adb logcat -d | grep 'Fully drawn' | sed -e 's/^.*: +\(.*\)ms$//' -e 's/s//'
> I/ActivityManager( 1843): Fully drawn com.amazon.android.calypo/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +233ms

O mesmo acontece quando eu coloco a saída em uma variável primeiro.

$ out="$(adb logcat -d | grep 'Fully drawn')"                                           
$ echo $out | sed -e 's/^.*: +\(.*\)ms$//' -e 's/s//'
> I/ActivityManager( 1843): Fully drawn com.amazon.android.calypo/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +233ms

Tentei despejar a saída em um arquivo de texto, sem dados:

adb logcat -d | grep 'Fully drawn' > temp.txt
cat temp.txt | sed -e 's/^.*: +\(.*\)ms$//' -e 's/s//'
> I/ActivityManager( 1843): Fully drawn com.amazon.android.calypo/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +233ms

Alguém sabe por que esse é o caso?

    
por Danny Chia 22.11.2016 / 05:14

1 resposta

2

adb produz CR / LF similar ao final das linhas. Tente pular o comando $ in sed no final.

    
por 22.11.2016 / 07:53