Unix команда для очистки лог-файла изнутри "меньше"?

1170
Jesper Rønn-Jensen

Я предпочитаю использовать «меньше» для чтения лог-файлов. В отличие от "tail -f", я могу одновременно следовать ( Shift + F), останавливаться ( Ctrl + C), перемещаться вверх и вниз uи dт. Д.

Теперь, что я действительно хотел бы, это возможность очистить определенный лог-файл изнутри программы. Это возможно?

4

4 ответа на вопрос

5
Wolf

Самый простой способ ИМХО это:
!>%
То есть: знак исключения "!", больший знак ">"и знак процента "%".
Может быть, это поможет.

Не могли бы вы дать краткое объяснение того, как это работает? Я не особенно знаком с любым из признаков? Jesper Rønn-Jensen 14 лет назад 0
Я буду стараться. Хотя мой английский не так хорош. А поскольку у нас мало места для замечаний, его придется разделить. Здесь мы идем: «!» / Восклицательный знак вызывает оболочку для запуска того, что мы печатаем дальше (см. Man less). Знак «>» / больше - это команда перенаправления оболочки (см. man bash). "%" / Знак процента - это имя текущего файла (см. Man less). Таким образом, простыми словами мы говорим меньше: «запустить оболочку (!) И перенаправить (>) в этот файл (%)». Но что он перенаправляет? Поскольку файл не указан, он перенаправляет «стандартный ввод» в файл. Стандартный ввод пуст, поэтому «ничто» не перенаправляется в файл ... Wolf 14 лет назад 1
... так что файл - в конце концов - не имеет "ничего". Оно пустое. Таким способом вы можете очистить все виды файлов. просто введите «> имя файла» в командной строке, чтобы очистить файл «имя файла». Смотрите также "man bash" в разделе "Перенаправление вывода" (bash имеет длинную man-страницу ...) Надеюсь, что смогу помочь. Wolf 14 лет назад 0
+1 Хороший трюк. Также красиво загадочным ;-). sleske 13 лет назад 0
@ Волк, почему бы тебе не отредактировать это объяснение прямо в ответ? Michael 8 лет назад 0
2
innaM

Вы можете просто нажать, vчтобы отредактировать файл в vim. В vim вы должны оказаться в строке, в которой вы в последний раз были меньше, таким образом, нажатие Vggdдолжно удалить из вашей текущей позиции в начало файла. С :wqтобой надо возвращаться меньше.

Тем не менее, приложение, которое записывает файл журнала, может совсем не нравиться, поэтому ваш пробег может варьироваться.

1
ℝaphink

Самым простым, что я могу придумать, является использование ^Zтекущего процесса в фоновом режиме, удаление файлов и ввод текста, fgчтобы вернуться к вашему процессу. Тем не менее, удаление файлов журналов не лучший способ справиться с ними, гораздо лучше обычно использовать их logrotateдля сжатия.

0
Chris Johnsen

Вы можете использовать !cp /dev/null %, чтобы усечь текущий просматриваемый файл. Но, как отметили другие, это может работать неправильно (например, если приложение, записывающее файл, сохраняет файл открытым вместо открытия / записи / закрытия для каждой записи). Вы также можете попробовать !mv -f % %.old && cp /dev/null %, который переместит файл с пути, а затем создаст его заново.

В любом случае, я вижу странное поведение от меньшего, когда пытаюсь это. ( Rне обновляется с диска, Gне ищет и не отображает текущий EOF (обычно используется для «извлечения» новых строк без перехода в «хвостовой режим»), hqGчитает новые строки из файла, но добавляет все содержимое файл до конца буфера, а не просто добавление новых строк в конец (у файла есть строки 1, затем 1/2, затем 1/2/3 и т. д., меньше может показать 1/1/1/2 / 1/2/1/2/3/1/2/3/1/2/3/4/1/2/3/4/1/2/3/4/5, если я дважды выполнял «hqG» после каждой новой строки)).

Похоже, эти же проблемы возникают и с vметодом « усекать по редактору».

Похожие вопросы