2016-03-31 21 views
2

Kullanmakta olduğum, konsolda oturum açan bir komut satırı programım var. Ancak, bazı buggy firmware yapmak, her 1 saniyede belirli bir hata yazdırır.grep kullanarak filtre komutu çıkışı

Çıkışı filtrelemek için grep'u nasıl kullanabilirim, böylece bu belirli bir hata satırı konsolda oturum açılsın mı?

Ben kurtulmak istediğiniz tam hatadır:

[1] [NTC] [NET] netcam_read_html_jpeg: Potential split boundary - 1447 chars flushed, 1 re-positioned 

ben şöyle, içinde kusurlu hattı ile bir sh komut dosyası oluşturursanız: o zaman

#!/bin/sh 

echo "[1] [NTC] [NET] netcam_read_html_jpeg: Potential split boundary - 1447 chars flushed, 1 re-positioned" 
echo "testing" 

Ve çalıştırın, beklendiği gibi ben t grep -v kullanarak çalıştırırsanız çıktı, şimdi,

[1] [NTC] [NET] netcam_read_html_jpeg: Potential split boundary - 1447 chars flushed, 1 re-positioned 
testing 

olduğunu ry şöyle, bu satırı atlamak:

./script.sh | grep -v "[1] [NTC] [NET] netcam_read_html_jpeg: Potential split boundary - 1447 chars flushed, 1 re-positioned" 

çıkışı hala: Aynı senaryoyu çalıştırırsanız

[1] [NTC] [NET] netcam_read_html_jpeg: Potential split boundary - 1447 chars flushed, 1 re-positioned 
testing 

Ancak, çalışırken bu kez testing içeren çizgi kurtulmak için Bunu şöyle:

./script.sh | grep -v "testing" 

Sonra çıkışı, beklendiği gibi:

[1] [NTC] [NET] netcam_read_html_jpeg: Potential split boundary - 1447 chars flushed, 1 re-positioned 

Şimdi burada sorun nedir ?? Açıkçası, ikinci örnekte çalıştığı için doğru komutu kullanıyorum. İstediğim gerçek çizgiyi atlamak için işe yaramıyor!

Neyi eksik?

+0

https://stackoverflow.com/help/how-to-ask okuyunuz. Ayrıca, kendi başına yaptığınız girişimleri lütfen gösteriniz. Sormadan önce bazı girişimlerde bulunmanız bekleniyor. –

+0

@EtanReisner - Güncelleştirilmiş soru –

+0

Köşeli parantezler düzenli ifade meta karakterleridir. Bir karakter sınıfı demek istiyorlar. Normal karakterlerle eşleşmiyorlar. Onlardan ('\\ 'ile) kurtulmanız ya da grep'i sabit kalıpları kullanması gerektiğini söylemeniz gerekir (' fgrep' veya 'f' bayrağı' grep' ile). –

cevap

2

Anladım!

Konsola yazdırılan çizgiler stderr'e gönderiliyordu, bu nedenle grep hiçbir şeye bakmıyordu.

Ben iş yapmak ran buyruk:

sudo motion 2> >(grep -v "\[1\] \[NTC\] \[NET\] netcam_read_html_jpeg: Potential split boundary - 1447 chars flushed, 1 re-positioned" 1>&2) 
+0

Bu bir çözüm. sudo hareket 2> & 1 | grep ... 'de (daha az taşınabilir süreç ikamesine ihtiyaç duymadan) çalıştı. –