Хотя я не думаю, что у Pierr была эта проблема, мне нужно было решение, которое не задерживало бы вывод из живого «хвоста» файла, так как я хотел отслеживать несколько журналов предупреждений одновременно, добавляя в каждую строку имя соответствующего журнала. ,
К сожалению, sed, cut и т. Д. Добавили слишком много буферов и не позволили мне увидеть самые последние строки. Предложение Стивена Пенни использовать -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
для легких задач, таких как эта. Если известен «префикс», очень легко выбрать символ, а не из «префикса».