Saya ingin mengekor file tetapi hanya baris output yang memiliki string tertentu di dalamnya. Apakah ini mungkin?
11
gunakan grep. Itu dibangun hanya untuk tujuan itu.
Untuk menemukan baris dari ekor / var / log / syslog yang memiliki "cron" di dalamnya, jalankan:
tail -f /var/log/syslog | grep cron
Dan karena ia menerima apa pun melalui stdin, Anda dapat menggunakannya pada output dari perintah lain apa pun, dengan memipis dengan cara yang sama seperti di atas (menggunakan simbol |).
grep
buffer akan digunakan ketika digunakan secara non-interaktif, seperti ketika itu merupakan bagian dari pipa yang lebih panjang. GNU grep 2.5.1 menawarkan--line-buffered
opsi untuk mengatasi ini ketika menghilangkan grep dari pipa bukanlah suatu pilihan. (Ketika saya mengatakan grep akan buffer saya maksudkan Anda tidak akan melihat output sampai buffer mencapai sesuatu seperti 4k.)Semoga itu bisa membantu.
sumber
Berikut adalah beberapa ide lain, yang walaupun tidak sesederhana itu, dapat menawarkan beberapa fleksibilitas tambahan yang menarik:
Pertama, Anda dapat memfilter dengan awk alih-alih grep:
yang bekerja persis sama dengan contoh menggunakan
grep
. Anda dapat memperluas ini dengan menggunakan kekuatan awk, misalnya:yang akan mencetak tanggal 6 melalui kolom terakhir dari keluaran (bidang dipisahkan spasi)
Gagasan lain yang serupa adalah menggunakan perl one-liner:
itu bekerja persis seperti
grep
. Mungkin Anda ingin penghitung nomor baris dan hanya bidang ke-6? Bagaimana dengan ini:Tentunya semua hal ini dapat dilakukan dengan alat lain juga, tetapi saya ingin menggambarkan bahwa ada beberapa cara yang menyenangkan untuk menggunakan bahasa tujuan yang lebih umum seperti awk atau perl di sini.
sumber
Trik lain yang perlu diperhatikan, jika Anda memiliki file CSV dengan header yang ingin Anda hilangkan, mis:
Tidak peduli berapa lama inputnya
tail
,+n -2
akan menghilangkan baris pertama.sumber