Meskipun saya tidak berpikir pierr memiliki masalah ini, saya membutuhkan solusi yang tidak akan menunda output dari "ekor" file, karena saya ingin memonitor beberapa log peringatan secara bersamaan, mengawali setiap baris dengan nama masing-masing log .
Sayangnya, sed, cut, dll. Memperkenalkan terlalu banyak buffering dan membuat saya tidak bisa melihat baris terbaru. Saran Steven Penny untuk menggunakan -s
opsi nl
menarik, dan pengujian membuktikan bahwa itu tidak memperkenalkan buffer yang tidak diinginkan yang membuat saya khawatir.
Namun, ada beberapa masalah dengan penggunaan nl
, terkait dengan keinginan untuk menghapus nomor baris yang tidak diinginkan (bahkan jika Anda tidak peduli dengan estetika itu, mungkin ada kasus di mana menggunakan kolom tambahan tidak diinginkan). Pertama, menggunakan "potong" untuk menghapus angka-angka yang memperkenalkan kembali masalah buffering, sehingga merusak solusi. Kedua, menggunakan "-w1" tidak membantu, karena ini TIDAK membatasi jumlah baris menjadi satu kolom - itu hanya menjadi lebih luas karena lebih banyak digit diperlukan.
Tidak cantik jika Anda ingin mengambil ini di tempat lain, tetapi karena itulah yang sebenarnya tidak perlu saya lakukan (semuanya sudah ditulis untuk mencatat file, saya hanya ingin menonton beberapa sekaligus dalam waktu nyata), yang terbaik cara untuk kehilangan nomor baris dan hanya awalan saya adalah memulai -s
string dengan carriage return (CR atau ^ M atau Ctrl-M). Jadi misalnya:
#!/bin/ksh
# Monitor the widget, framas, and dweezil
# log files until the operator hits <enter>
# to end monitoring.
PGRP=$$
for LOGFILE in widget framas dweezil
do
(
tail -f $LOGFILE 2>&1 |
nl -s"^M${LOGFILE}> "
) &
sleep 1
done
read KILLEM
kill -- -${PGRP}
sed
untuk tugas-tugas ringan seperti ini. Jika "awalan" diketahui, sangat mudah untuk memilih karakter bukan dari "awalan".