J'ai une commande shell pour obtenir le temps d'affichage de l'interface utilisateur pour une application Android (qui n'est pas vraiment pertinente pour cette question) en millisecondes. En tout cas, la sortie ressemble à
I/ActivityManager( 1843): Fully drawn com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: [time]
Où [heure] est du format +###ms
ou +#s###ms
(encore une fois, non pertinent ici).
La commande est la suivante:
adb logcat -d | grep 'Fully drawn' | sed -e 's/^.*: +\(.*\)ms$/\1/' -e 's/s//'
Cela fonctionne comme prévu lorsque j'utilise echo
pour afficher directement la sortie:
$ echo 'I/ActivityManager( 1843): Fully drawn com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +233ms' | sed -e 's/^.*: +\(.*\)ms$/\1/' -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$/\1/' -e 's/s//'
> 1233
Cependant, lorsque je l'utilise sur d'autres commandes qui doivent afficher une sortie du même format, sed
correspond à la ligne entière plutôt qu'à la seule heure de rendu:
$ adb logcat -d | grep 'Fully drawn' | sed -e 's/^.*: +\(.*\)ms$/\1/' -e 's/s//'
> I/ActivityManager( 1843): Fully drawn com.amazon.android.calypo/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +233ms
La même chose se produit lorsque je mets d'abord la sortie dans une variable.
$ out="$(adb logcat -d | grep 'Fully drawn')"
$ echo $out | sed -e 's/^.*: +\(.*\)ms$/\1/' -e 's/s//'
> I/ActivityManager( 1843): Fully drawn com.amazon.android.calypo/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +233ms
Essayé de transférer la sortie dans un fichier texte, pas de dés:
adb logcat -d | grep 'Fully drawn' > temp.txt
cat temp.txt | sed -e 's/^.*: +\(.*\)ms$/\1/' -e 's/s//'
> I/ActivityManager( 1843): Fully drawn com.amazon.android.calypo/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +233ms
Quelqu'un sait pourquoi c'est le cas?
$
commande de fin dans sed.ms$
àms.*$
, et cela a résolu le problème. Merci!Réponses:
adb produit des CR / LF de type dos à la fin des lignes. Essayez de passer la
$
commande de fin dans sed.la source