- Как отключить перенос строки в терминале?
- Linux как убрать перенос строк
- Команда tr и ее синтаксис
- 1) Заменить все строчные буквы на заглавные
- 2) Удаление символов с помощью tr
- 3) Удаление ила змена символов НЕ в наборе
- 4) Замена пробелов на табуляцию
- 5) Удаление повторений символов
- 6) Заменить символы из набора на перенос строки
- 7) Генерируем список уникальных слов из файла
- 8) Кодируем символы с помошью ROT
- Вывод
- unixforum.org
- sed, помогите удалить лишние переносы (окружение: UnixUtils)
- sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
- Re: sed, помогите удалить лишние переносы
Как отключить перенос строки в терминале?
Мне нужно просматривать большие файлы журналов с помощью оболочки Bash. Я использовал less для открытия файлов, но так как строки слишком длинные, происходит какая-то перенос строки / слова.
Поскольку файлы представляют собой журналы Log4J, и в начале каждой строки есть шаблон, обернутые строки затрудняют анализ выходных данных, поэтому я начал использовать метод, less -S который прерывает длинные строки.
Но теперь мне нужно использовать tail -f , и это также строка переносит вывод. Можно ли отключить перенос строки в оболочке bash для всех команд?
Примечание: есть ответ на другой вопрос, в котором упоминается escape-последовательность echo -ne ‘\e[?7l’ , но он не работает на bash.
Вы действительно нуждаетесь tail -f или хотели бы что-то less +F сделать Поскольку кажется, что вы все еще хотите интерактивный пейджер, мне кажется, что было бы намного легче придерживаться его, less чем переопределять его самостоятельно.
Последнее замечание: вы рассматривали tail -f file | less ?
less -S +F filename
- Нажмите, Ctrl c чтобы остановить хвост, и теперь вы можете перемещаться влево и вправо с помощью клавиш курсора.
- Нажмите, Shift f чтобы возобновить хвостохранилище
- Нажмите Ctrl c , q чтобы выйти
Нашел хороший ответ от суперпользователя , который работает из коробки gnome-terminal и, вероятно, для других терминалов:
Предположим, вы определили COLUMNS переменную, вы можете выполнить
в противном случае $COLUMNS подставьте ширину столбцов терминала, полученную с помощью stty -a .
Вы можете отключить перенос строк для less , tail и любой другой команды под солнцем Linux с:
Чтобы восстановить перенос строки, используйте:
Эмулятор терминала терминатора (http://software.jessies.org/terminator/) позволяет не переносить длинные строки и имеет горизонтальную прокрутку (но написана на Java).
Два хороших ответа / примеры здесь
Одно предостережение: по крайней мере, на встроенном терминале на моем Mac Cut, кажется, не очень хорошо обрабатывает символы табуляции. Кажется, он отображает их, например, с 8 пробелами, но просто вычисляет их как 4 пробела в ширину или что-то в этом роде. Другими словами, если ваш терминал имеет ширину 80 символов и ваш вывод содержит несколько вкладок на строку, вы должны установить ширину, может быть, 60 или что-то подобное. YMMV.
Используйте ниже варианты с less . Это отключит перенос слов и сохранит цвета текста, если указано.
less -SR +F filename
На этой странице приведено несколько примеров с использованием -f . из моих тестов это не работает должным образом, если вам действительно нужен конвейер (например, если вам нужно передать что-то большее, например, grep), вы можете использовать что-то вроде :
возможно, не самый лучший по производительности, но работает . иначе, если не требуется дополнительная передача, вы можете использовать что-то другое, например:
Есть много комментариев, которые отклоняются от вопроса. Вопрос ОП был
Но теперь мне нужно использовать tail -f , и это также строка переносит вывод. Можно ли отключить перенос строки в оболочке bash для всех команд?
Некоторые комментарии были сделаны по поводу функции автоматического переноса, заявив, что она есть не во всех терминалах. Может быть. Но (кроме терминатора , разработчики которого не описывают описание терминала ), все приведенные примеры были xterm, rxvt, а также похожими или потомками. Все это связано.
+aw Вариант в xterm соответствует autoWrap ресурсу. Обращаясь к руководству, он говорит, что
что, безусловно, не «зависит от вашего выбора терминала», поскольку любой терминал с VT100-совместимостью поддерживает эту функцию. xterm и rxvt делают это, например. Другие делают так же.
Вопрос о том, будет ли эта функция полезна для OP, спорен. Подавление переноса строк — это только один аспект проблемы:
- Оболочка знает ширину терминала, но это можно переопределить, установив COLUMNS «большое» значение.
- Конечно, это означает, что приложения будут тратить много времени на написание правого поля (а некоторые, если его неправильно, все равно начнут новую строку).
- OP, вероятно, предполагал, что приложение будет прокручивать влево / вправо, чтобы использовать широкий терминал. (терминатор делает это — частично — но другие его недостатки отменяют это, за исключением тех, кто использует терминал только для вывода cat файла журнала на экран).
- На самом деле OP ищет набор инструментов, которые могут отключить перенос строк, особенно для просмотра файлов журналов. Если терминал работает достаточно хорошо для общего использования, это не имеет отношения к выбору инструментов, которые используются в терминале.
Есть пейджеры, которые могут делать то, что нужно, например, многозадачный, который перечисляет в своих функциях
Перенос строки можно отключить, после чего можно перемещаться влево / вправо с помощью клавиш курсора.
Будучи основанным на ncurses, он должен работать на любом из указанных терминалов.
Источник
Linux как убрать перенос строк
Команда tr (translate) используется в Linux в основном для преобразования и удаления символов. Она часто находит применение в скриптах обработки текста. Ее можно использовать для преобразования верхнего регистра в нижний, сжатия повторяющихся символов и удаления символов.
Команда tr требует два набора символов для преобразований, а также может использоваться с другими командами, использующими каналы (пайпы) Unix для расширенных преобразований.
В этой статье мы узнаем, как использовать команду tr в операционных системах Linux и рассмотрим некоторые примеры.
Команда tr и ее синтаксис
Ниже приведен синтаксис команды tr. Требуется, как минимум, два набора символов и опции.
SET1 и SET2 это группы символов. are a group of characters. Необходимо перечислить необходимые символы или указать последовательность.
\NNN -> восмеричные (OCT) символы NNN (1 до 3 цифр)
\\ -> обратный слеш (экранированный)
\n -> новая строка (new line)
\r -> перенос строки (return)
\t -> табуляция (horizontal tab)
[:alnum:] -> все буквы и цифры
[:alpha:] -> все буквы
[:blank:] -> все пробелы
[:cntrl:] -> все управляющие символы (control)
[:digit:] -> все цифры
[:lower:] -> все буквы в нижнем регистре (строчные)
[:upper:] -> все буквы в верхнем регистре (заглавные)
Примеры использования команды tr:
Вот некоторые опции:
-c , -C , —complement -> удалить все символы, кроме тех, что в первом наборе
-d , —delete -> удалить символы из первого набора
-s , —squeeze-repeats -> заменять набор символов, которые повторяются, из указанных в последнем наборе знаков
1) Заменить все строчные буквы на заглавные
Мы можем использовать tr для преобразования нижнего регистра в верхний или наоборот.
Просто используем наборы [:lower:] [:upper:] или «a-z» «A-Z» для замены всех символов.
Вот пример, как преобразовать в Linux с помощью команды tr все строчные буквы в заглавные:
А сейчас сделаем замену из файла input.txt
Как мы видим, в файле ничего не изменилось, осталось все строчными буквами. Чтобы изменения были в файле, на необходимо перевести вывод в новый файл. Например, в output.txt
Кстати, в команде sed есть опция y которая делает то же самое (sed ‘y/SET1/SET2’)
2) Удаление символов с помощью tr
Опция -d используется для удаления всех символов, которые указаны в наборе символов.
Следующая команда удалит все символы из этого набора ‘aei’.
Следующая команда удалит все цифры в тексте. Будем использовать набор [:digit:] , чтобы определить все цифры.
А вот пример команд, которыми можно удалить переносы на новые строки
3) Удаление ила змена символов НЕ в наборе
С помощью параметра -c Вы можете сказать tr заменить все символы, которые Вы не указали в наборе. Приведем пример.
А вот пример удаления, просто укажем опцию -d и только один набор (символы которого удалять НЕ надо, а остальные удалить)
4) Замена пробелов на табуляцию
Для указания пробелов используем — [:space:] , а для табуляции — \t.
5) Удаление повторений символов
Это делает параметр -s . Рассмотрим пример удаления повторов знаков.
Или заменим повторения на символ решетки
6) Заменить символы из набора на перенос строки
Сделаем так, чтобы все буквы были заменены на перенос новой строки:
7) Генерируем список уникальных слов из файла
Это иногда очень полезная команда, когда необходимо определить количество повторений и вывести уникальные слова из файла:
8) Кодируем символы с помошью ROT
ROT (Caesar Cipher) — это тип криптографии, в котором кодирование выполняется путем перемещения букв в алфавите к его следующей букве.
Давайте проверим, как использовать tr для шифрования.
В следующем примере каждый символ в первом наборе будет заменен соответствующим символом во втором наборе.
Первый набор [a-z] (это значит abcdefghijklmnopqrstuvwxyz). Второй набор [n-za-m] (который содержит pqrstuvwxyzabcdefghijklmn).
Простая команда для демонстрации вышеуказанной теории:
Полезно при шифровании электронных адресов:
Вывод
tr — это очень мощная команда линукс при использовании пайпов Unix и очень часто используется в скриптах. Дополнительную информацию об этой утилите всегда можно найти в man.
Если у Вас есть какие-либо дополнения, не стесняйтесь пишите в комментариях.
Источник
unixforum.org
Форум для пользователей UNIX-подобных систем
- Темы без ответов
- Активные темы
- Поиск
- Статус форума
sed, помогите удалить лишние переносы (окружение: UnixUtils)
Модератор: /dev/random
sed, помогите удалить лишние переносы
Сообщение uptime » 24.06.2010 18:48
Re: sed, помогите удалить лишние переносы
Re: sed, помогите удалить лишние переносы
Сообщение t.t » 24.06.2010 19:13
Re: sed, помогите удалить лишние переносы
Сообщение Encore » 24.06.2010 19:16
upd. что й то я не в дугу совсем про переносы не прочитал..
Re: sed, помогите удалить лишние переносы
1. Зачем обратно менять все пробелы на \n? 🙂 Видимо, там должно быть 2 пробела.
2. Так это ж sed весь файл в память засосет.
Re: sed, помогите удалить лишние переносы
Сообщение t.t » 24.06.2010 19:54
1. Зачем обратно менять все пробелы на \n? Видимо, там должно быть 2 пробела.
2. Так это ж sed весь файл в память засосет.
Re: sed, помогите удалить лишние переносы
Re: sed, помогите удалить лишние переносы
Сообщение t.t » 24.06.2010 20:03
Re: sed, помогите удалить лишние переносы
Сообщение Nazyvaemykh » 24.06.2010 20:27
Re: sed, помогите удалить лишние переносы
Сообщение t.t » 24.06.2010 20:42
Re: sed, помогите удалить лишние переносы
Сообщение Nazyvaemykh » 24.06.2010 20:58
У меня в браузере отображается с пробелами (с точностью до пробелов решение правильное).
Я лишь хотел показать, что относительно простое решение можно получить использованием sed-команды ‘N’.
Re: sed, помогите удалить лишние переносы
Сообщение uptime » 25.06.2010 12:36
Re: sed, помогите удалить лишние переносы
Сообщение uptime » 25.06.2010 12:42
так не работала. Мой вариант:
Re: sed, помогите удалить лишние переносы
Сообщение /dev/random » 25.06.2010 12:46
Re: sed, помогите удалить лишние переносы
Сообщение uptime » 25.06.2010 12:49
Re: sed, помогите удалить лишние переносы
Сообщение t.t » 25.06.2010 13:20
Re: sed, помогите удалить лишние переносы
Загрузите кусок файла в виде приложения (attachment), а то такое чувство, что там куча каких-то странных невидимых символов.
Если в файле есть trailing whitespaces, то приведенный мной скрипт работает коряво:
Если его слегка подрихтовать на этот счет, то:
Re: sed, помогите удалить лишние переносы
Сообщение uptime » 25.06.2010 15:19
уже лучше. Но там какая то аццкая смесь пробелов и табов. Во избежание порчи прикрепляю исходный файл. (Переименовал в .txt)
мой последний вариант:
Re: sed, помогите удалить лишние переносы
Сообщение /dev/random » 25.06.2010 15:23
Оу. Так это в винде, что ли? Там CRLF!
Upd: блин, торможу. Сказано же, UnxUtils. Значит, да, в винде.
Re: sed, помогите удалить лишние переносы
Сообщение Subj » 25.06.2010 15:23
Я бы примерно так сделал:
cat file | sed -n «/7/p» | while read i1; read i2; do echo $i1 $i2 ; done
cat file | sed -n ‘s/[\t ]\+//;/7/p’ | sed ‘$!N;s/\n/ /’
Насчет венды — хз )
Re: sed, помогите удалить лишние переносы
Сообщение uptime » 25.06.2010 15:56
Re: sed, помогите удалить лишние переносы
Сообщение uptime » 25.06.2010 16:02
Я бы примерно так сделал:
cat file | sed -n «/6/p» | while read i1; read i2; do echo $i1 $i2 ; done
Re: sed, помогите удалить лишние переносы
Сообщение /dev/random » 25.06.2010 16:06
Re: sed, помогите удалить лишние переносы
Сообщение uptime » 25.06.2010 16:25
ура! товарищи! яйца sh подействовал ))
всех откликнувшихся готов угостить
Re: sed, помогите удалить лишние переносы
Сообщение Subj » 25.06.2010 16:33
Re: sed, помогите удалить лишние переносы
Сообщение Nazyvaemykh » 25.06.2010 17:41
Ну, вот поправленный немного вариант чисто с sed (пробовал только в GNU\Linux окружении, с приведенным примером работает правильно):
Re: sed, помогите удалить лишние переносы
Сообщение uptime » 28.06.2010 11:39
Ну, вот поправленный немного вариант чисто с sed (пробовал только в GNU\Linux окружении, с приведенным примером работает правильно):
Заменил одинарные кавычки на двойные. Результат:
Источник