У меня есть команда оболочки, чтобы получить время рисования пользовательского интерфейса для приложения Android (которое на самом деле не имеет отношения к этому вопросу) в миллисекундах. В любом случае, результат выглядит так
I/ActivityManager( 1843): Fully drawn com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: [time]
Где [время] имеет формат +###ms
или +#s###ms
(опять же, здесь не имеет значения).
Команда выглядит следующим образом:
adb logcat -d | grep 'Fully drawn' | sed -e 's/^.*: +\(.*\)ms$/\1/' -e 's/s//'
Это работает, как и ожидалось, когда я использую echo
для непосредственного отображения вывода:
$ 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
Однако, когда я использую его для других команд, которые должны отображать вывод того же формата, sed
соответствует всей строке, а не только времени рендеринга:
$ 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
То же самое происходит, когда я сначала помещаю вывод в переменную.
$ 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
Пробовал выгрузить вывод в текстовый файл, без кубиков:
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
Кто-нибудь знает, почему это так?