3

У меня есть команда оболочки, чтобы получить время рисования пользовательского интерфейса для приложения 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

Кто-нибудь знает, почему это так?

1 ответ1

2

ADB создает DOS-подобные CR/LF в конце строки. Попробуйте пропустить завершающий $ в команде sed.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .