Sed neden yalnızca yankıdan gelen doğrudan çıktıda çalışıyor?


3

Milisaniye cinsinden (bu soruyla gerçekten alakalı olmayan) bir Android uygulaması için UI çizim zamanını alabilmek için bir kabuk komutum var. Her halükarda, çıktı benziyor

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

Nerede [süre] biçimi olan +###msveya +#s###ms(burada yine ilgili değildir).

Komut aşağıdaki gibidir:

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

echoÇıktıyı doğrudan görüntülemek için kullandığımda beklendiği gibi çalışıyor :

$ 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

Ancak, aynı formatta bir çıktı göstermesi gereken diğer komutlarda kullandığımda, sedsadece oluşturma süresinden ziyade tüm satırla eşleşiyor:

$ 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

Çıktıyı ilk önce bir değişkene koyduğumda da aynı şey olur.

$ 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

Çıktıyı bir metin dosyasına atmaya çalıştım, zar yok:

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

Neden böyle olduğunu bilen var mı?


1
adb, hatların sonunda dos benzeri CR / LF üretebilir. $Sed komutunda izini atlamayı dene .
Ipor Sircer

Evet, nedeni bu. Değiştim ms$için ms.*$ve bu sorun çözüldü. Teşekkürler!
Danny Chia,

@IporSircer Belki de OP'nin konuyu kapatması için cevap olarak yazabilirsin?
ejbytes

Yanıtlar:


2

adb, hatların sonunda dos benzeri CR / LF üretir. $Sed komutunda izini atlamayı dene .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.