Jadi menarik membuka file dengan cat
dan kemudian menggunakan grep
untuk mendapatkan baris yang cocok hanya membuat saya sejauh ini ketika saya bekerja dengan set log tertentu yang saya hadapi. Ini membutuhkan cara untuk mencocokkan garis ke suatu pola, tetapi hanya untuk mengembalikan bagian garis setelah pertandingan. Bagian sebelum dan sesudah pertandingan akan bervariasi secara konsisten. Saya telah bermain dengan menggunakan sed
atau awk
, tetapi belum dapat menemukan cara untuk memfilter garis untuk menghapus bagian sebelum pertandingan, atau hanya mengembalikan bagian setelah pertandingan, apakah akan bekerja. Ini adalah contoh baris yang perlu saya filter:
2011-11-07T05:37:43-08:00 <0.4> isi-udb5-ash4-1(id1) /boot/kernel.amd64/kernel: [gmp_info.c:1758](pid 40370="kt: gmp-drive-updat")(tid=100872) new group: <15,1773>: { 1:0-25,27-34,37-38, 2:0-33,35-36, 3:0-35, 4:0-9,11-14,16-32,34-38, 5:0-35, 6:0-15,17-36, 7:0-16,18-36, 8:0-14,16-32,34-36, 9:0-10,12-36, 10-11:0-35, 12:0-5,7-30,32-35, 13-19:0-35, 20:0,2-35, down: 8:15, soft_failed: 1:27, 8:15, stalled: 12:6,31, 20:1 }
Bagian yang saya butuhkan adalah segalanya setelah "macet".
Latar belakang di balik ini adalah saya bisa mengetahui seberapa sering sesuatu berhenti:
cat messages | grep stalled | wc -l
Yang perlu saya lakukan adalah mencari tahu berapa kali simpul tertentu terhenti (ditunjukkan oleh bagian sebelum masing-masing titik dua setelah "terhenti". Jika saya hanya memahami untuk itu (yaitu 20 :) mungkin akan mengembalikan garis yang telah gagal lunak, tetapi tidak ada warung, yang tidak membantu saya. Saya hanya perlu memfilter bagian yang macet sehingga saya kemudian dapat mencari simpul tertentu dari yang sudah macet.
Untuk semua maksud dan tujuan, ini adalah sistem freebsd dengan utilitas inti GNU standar, tetapi saya tidak dapat menginstal apa pun tambahan untuk membantu.
sed
solusinya dan jangan perlakukan whitespace secara khusus.