Мне нужно просматривать большие файлы журналов с помощью оболочки Bash. Я использовал less
для открытия файлов, но так как строки слишком длинные, происходит какая-то перенос строки / слова.
Поскольку файлы представляют собой журналы Log4J, и в начале каждой строки есть шаблон, обернутые строки затрудняют анализ выходных данных, поэтому я начал использовать метод, less -S
который прерывает длинные строки.
Но теперь мне нужно использовать tail -f
, и это также строка переносит вывод. Можно ли отключить перенос строки в оболочке bash для всех команд?
Примечание: есть ответ на другой вопрос, в котором упоминается escape-последовательность echo -ne '\e[?7l'
, но он не работает на bash.
screen
, есть команда "обернуть". Вxterm
, есть-aw
опция для предотвращения автоматического переноса строк. Вероятно, есть некоторые X-ресурсы для других эмуляторов терминала. Какой эмулятор вы используете?gnome-terminal
.+aw
дляxterm
:) Но это решает проблему для вывода (например,ls -l
при использовании набора длинных имен Windows из TPB, это работает нормально), для ввода при вводе команды вы, вероятно, все еще хотите обернуть (или, по крайней мере, вы не хотите, чтобы он был таким, какой он есть сейчас+aw
: попробуйте написать за «границей столбца», а затем откатитесь назад для огромной ошибки GFX).urxvt
ниrxvt
Ответы:
Вы действительно нуждаетесь
tail -f
или хотели бы что-тоless +F
сделать Поскольку кажется, что вы все еще хотите интерактивный пейджер, мне кажется, что было бы намного легче придерживаться его,less
чем переопределять его самостоятельно.Последнее замечание: вы рассматривали
tail -f file | less
?источник
screen
и уxterm
них есть возможность предотвратить перенос строк. Но есть большая разница между усечением линии и скрытием ее конца, поэтому мы можем просмотреть ее, если захотим. Использованиеtail -f file | less -S
не является идеальным, так как кажется, что отключить,-f
но это лучшее решение, которое я нашел.less
напрямую.Пытаться:
less -S +F filename
источник
less -S
. Также очень полезно на ноутбуке.Нашел хороший ответ от суперпользователя , который работает из коробки
gnome-terminal
и, вероятно, для других терминалов:источник
Предположим, вы определили
COLUMNS
переменную, вы можете выполнитьв противном случае
$COLUMNS
подставьте ширину столбцов терминала, полученную с помощьюstty -a
.источник
$COLUMNS
(не обновляется сразуSIGWINCH
, только в следующем приглашении) иstty -a
(сложнее использовать в скрипте) являетсяtput cols
.cut
себя вести себя так, как будтоless -S
длинная строка буферизована, и мы можем увидеть всю строку, используя клавиши со стрелками?screen
окнах, каждое из которыхtail -f | cut
имеет сценарий или эмулируетless
поведение. Но пока нет решения, на данный момент.less -S
, он собирается испортить цветной текст или что-нибудь с выходом ANSI. Может тоже испортить Unicode.less -S
более полезно с цветным текстом. Вы можете использоватьless -S -E
для немедленного выхода - полезно для резки цветного вывода в $ COLUMNS.Вы можете отключить перенос строк для
less
,tail
и любой другой команды под солнцем Linux с:Чтобы восстановить перенос строки, используйте:
источник
Эмулятор терминала терминатора (http://software.jessies.org/terminator/) позволяет не переносить длинные строки и имеет горизонтальную прокрутку (но написана на Java).
источник
terminator v1.91
.terminator
, которые имеют одно и то же имя : этот, на который ссылается гостья, и тот, который вы используете.Два хороших ответа / примеры здесь
http://www.commandlinefu.com/commands/view/1710/tail-a-log-file-with-long-lines-truncated
Одно предостережение: по крайней мере, на встроенном терминале на моем Mac Cut, кажется, не очень хорошо обрабатывает символы табуляции. Кажется, он отображает их, например, с 8 пробелами, но просто вычисляет их как 4 пробела в ширину или что-то в этом роде. Другими словами, если ваш терминал имеет ширину 80 символов и ваш вывод содержит несколько вкладок на строку, вы должны установить ширину, может быть, 60 или что-то подобное. YMMV.
источник
Используйте ниже варианты с
less
. Это отключит перенос слов и сохранит цвета текста, если указано.less -SR +F filename
источник
На этой странице приведено несколько примеров с использованием -f ... из моих тестов это не работает должным образом, если вам действительно нужен конвейер (например, если вам нужно передать что-то большее, например, grep), вы можете использовать что-то вроде :
возможно, не самый лучший по производительности, но работает ... иначе, если не требуется дополнительная передача, вы можете использовать что-то другое, например:
источник
Есть много комментариев, которые отклоняются от вопроса. Вопрос ОП был
Некоторые комментарии были сделаны по поводу функции автоматического переноса, заявив, что она есть не во всех терминалах. Может быть. Но (кроме терминатора , разработчики которого не описывают описание терминала ), все приведенные примеры были xterm, rxvt, а также похожими или потомками. Все это связано.
+aw
Вариант вxterm
соответствуетautoWrap
ресурсу. Обращаясь к руководству, он говорит, чтои в последовательностях управления XTerm это говорит
что, безусловно, не «зависит от вашего выбора терминала», поскольку любой терминал с VT100-совместимостью поддерживает эту функцию. xterm и rxvt делают это, например. Другие делают так же.
Вопрос о том, будет ли эта функция полезна для OP, спорен. Подавление переноса строк - это только один аспект проблемы:
COLUMNS
«большое» значение.cat
файла журнала на экран).Есть пейджеры, которые могут делать то, что нужно, например, многозадачный, который перечисляет в своих функциях
Будучи основанным на ncurses, он должен работать на любом из указанных терминалов.
источник
VI
внутри типа vi
Я полагаю, есть также плагин для vi, который даст вам поведение, похожее на хвост.
источник
Если вы действительно хотите увидеть полные строки, вы можете скопировать и вставить текст в текстовый редактор, например Atom или Notepad ++, и отключить перенос строк.
источник