Хоча я не думаю, що у pierr виникло таке занепокоєння, мені було потрібне рішення, яке не затримуватиме виведення з прямого "хвоста" файлу, оскільки я хотів контролювати кілька журналів попередження одночасно, префіксуючи кожен рядок із назвою відповідного журналу .
На жаль, sed, cut, etc. ввели занадто багато буферизації і не давали мені бачити найбільш актуальні лінії. Пропозиція Стівена Пенні використати -s
варіант nl
була інтригуючою, і тестування показало, що воно не вводило небажаного буферизації, яке мене стосувало.
Однак із паролем було використано кілька проблем nl
, пов’язаних із бажанням викреслити небажані номери рядків (навіть якщо ви не переймаєтесь їх естетикою, можуть бути випадки, коли використання додаткових стовпців було б небажаним). По-перше, використання "вирізати" для викреслення чисел знову вводить проблему буферизації, тому вона руйнує рішення. По-друге, використання "-w1" не допомагає, оскільки це НЕ обмежує номер рядка одним стовпцем - він просто розширюється, оскільки потрібно більше цифр.
Це не дуже добре, якщо ви хочете зафіксувати це в іншому місці, але оскільки це саме те, що мені не потрібно було робити (все писалося для реєстрації файлів, я просто хотів переглянути декілька одразу в режимі реального часу), найкраще спосіб втратити номери рядків і мати лише мій префікс - почати -s
рядок із повернення каретки (CR або ^ M або Ctrl-M). Так, наприклад:
#!/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
легким завданням, як-от цей. Якщо "префікс" відомий, вибрати символ не з "префікса" дуже просто.