2016-03-21 20 views
0

Ben nasıl boru stdout'u biliyorumYankı şey

Very important output. 
Only important stuff here. 

Ama ederken grep ing isterim da benzerine echo şey her satırı bu yüzden şunun gibi görünüyor:

1) Very important output. 
2) Only important stuff here. 

Bunu nasıl yapabilirim?

Düzenleme: Görünüşe göre, ne yapmak istediğimi yeterince belirlemedim. Çizgilerin numaralandırılması sadece bir örnektir, genel olarak metin çıktısını (değişkenler ve neyin dahil olduğu) herhangi bir metin çıktısını bilmek istiyorum. Görüyorum ki kullanarak $0 aradığım çözümdür.

Bunu başarmanın başka yolları var mı?

+0

Bu herhangi bir şekilde programlama ile ilgili değil, ama önemli' -n 'grep deneyin '. –

+0

Burada okuma zihnim var. Mesajlar için, betiğin ilerlemesini bildirmek için 'stderr' kullanmanız daha iyi olur. Bu, borulama yaptığınız "stdout" ile etkileşime girmeyecektir. – biocyberman

cevap

2

Bu Bu size isabet satır numarasını verecektir 0

./myScript | grep 'important' | awk '{printf("%d) %s\n", NR, $0)}' 

1) Very important output. 
2) Only important stuff here. 

isabet kişi olacaktır

./myScript | grep -n 'important' 

3:Very important output. 
47:Only important stuff here. 
2

Eğer 1..n koşarak yeni çıktı üzerinde satır numaralarını istiyorsanız bir while ile

./myScript | awk '/important/{printf("%d) %s\n", ++i, $0)}' 
#    ^Grep part     ^Number starting at 1 
2

çözeltisi: burada n, yeni çıktı hatlarının sayısıdır Döngü büyük dosyalar için uygun değildir, bu yüzden sadece çok important şeyler olmadığında bu çözümü kullanmalıdır:

i=0 
while read -r line; do 
    ((i++)) 
    printf "(%s) Look out: %s" $i "${line}" 
done < <(./myScript | grep 'important')