Bir sedifadeye göre filtre eşleştirme satırlarını nasıl yapabilirim , ancak eşleşmeyen satırları yazdırmalarına izin vermek yerine yoksayabilirim?
Gerçek bir örnek olarak, scalacbir dizi dosya üzerinde çalıştırmak (Scala derleyicisini) ve -verboseçıktısından .classoluşturulan dosyaları okumak istiyorum . scalac -verbosebir sürü mesaj çıkarır, ancak biz sadece formdakilerle ilgileniyoruz [wrote some-class-name.class]. Şu anda yaptığım şey şudur ( |&bash 4.0'ın stderr'i sonraki programa aktarmanın yolu):
$ scalac -verbose some-file.scala ... |& sed 's/^\[wrote \(.*\.class\)\]$/\1/'
Bu, ilgilendiğimiz mesajlardan dosya adlarını çıkaracak, ancak diğer tüm mesajların değişmeden geçmesine de izin verecektir! Tabii ki bunun yerine şunu yapabiliriz:
$ scalac -verbose some-file.scala ... |& grep '^\[wrote .*\.class\]$' |
sed 's/^\[wrote \(.*\.class\)\]$/\1/'
Bu işe yarıyor ama gerçek problemin etrafından dolaşmaya çok benziyor, bu sedda girdiden eşleşmeyen satırları yok sayma talimatı verilecek. Peki bunu nasıl yapacağız?