Linux echo без переноса строки
Обновлено: 07.07.2024
эхо-команда
Существует также отдельная утилита /usr/bin/echo , но обычно встроенная версия оболочки имеет приоритет. Мы рассмотрим встроенную в Bash версию echo .
Синтаксис команды echo следующий:
При использовании команды echo следует учитывать несколько моментов.
echo Примеры
В следующих примерах показано, как использовать команду echo:
Вывести строку текста на стандартный вывод.
Отобразите строку текста, содержащую двойные кавычки.
Чтобы напечатать двойную кавычку, заключите ее в одинарные кавычки или экранируйте символ обратной косой черты.
Отобразите строку текста, содержащую одинарную кавычку.
Чтобы напечатать одинарную кавычку, заключите ее в двойные кавычки или используйте кавычки ANSI-C .
Используйте параметр -e чтобы включить интерпретацию escape-символов.
Символы соответствия шаблону.
Команда echo может использоваться с символами сопоставления с образцом, такими как подстановочные знаки. Например, приведенная ниже команда вернет имена всех файлов .php в текущем каталоге.
Если файл file.txt не существует, команда создаст его. При использовании > файл будет перезаписан, а символ >> добавит вывод в файл .
Используйте команду cat для просмотра содержимого файла:
Отображение переменных
echo также может отображать переменные. В следующем примере мы напечатаем имя текущего вошедшего в систему пользователя:
Отображение вывода команды
Используйте выражение $(command) чтобы включить вывод команды в аргумент echo . Следующая команда отобразит текущую дату :
Отображение в цвете
Используйте escape-последовательности ANSI, чтобы изменить цвета переднего плана и фона или установить свойства текста, такие как подчеркивание и полужирный шрифт.
Выводы
К настоящему времени вы должны хорошо понимать, как работает команда echo .
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Когда я выполняю команды в Bash (или, точнее, wc -l < log.txt ), вывод содержит разрыв строки после него. Как мне от этого избавиться?
Если ожидаемый результат - одна строка , вы можете просто удалить из вывода все символы новой строки. Нет ничего необычного в том, чтобы использовать конвейерную утилиту tr или, если желательно, Perl:
Вы также можете использовать подстановку команд, чтобы удалить завершающую новую строку:
Если ожидаемый результат может содержать несколько строк , вам нужно принять другое решение:
Если вы хотите удалить НЕСКОЛЬКО символов новой строки из конца файла, снова используйте подстановку cmd:
Если вы хотите строго удалить ПОСЛЕДНИЙ символ новой строки из файла, используйте Perl:
Обратите внимание: если вы уверены, что у вас есть завершающий символ новой строки, который вы хотите удалить, вы можете использовать head из GNU coreutils, чтобы выбрать все, кроме последнего байта. Это должно быть довольно быстро:
Кроме того, для полноты вы можете быстро проверить, где находятся ваши символы новой строки (или другие специальные) в вашем файле, используя cat и флаг "показать все" -A . Знак доллара обозначает конец каждой строки:
Использование AWK:
Объяснение:
- -v назначение для ORS
- ORS - разделитель выходной записи пуст. Это заменит новую строку (разделитель входных записей) на ""
printf уже обрезает за вас завершающую новую строку:
- printf напечатает ваш контент вместо заполнителя строки %s .
- Если вы не укажете ему выводить новую строку ( %s\n ), этого не произойдет.
Если вы хотите напечатать вывод чего-либо в Bash без конца строки, вы повторяете это с помощью переключателя -n .
Если он у вас уже есть в переменной, то повторите его с обрезанным завершающим символом новой строки:
Или вы можете сделать это в одной строке:
Если вы назначаете его вывод переменной, bash автоматически удаляет пробелы:
Также имеется прямая поддержка удаления пробелов в подстановке переменных Bash:
Если вы хотите удалить только последний символ новой строки , выполните по конвейеру:
sed не будет добавлять \0 в конец потока, если для разделителя задано значение NUL через -z , тогда как для создания текстового файла POSIX (определенного для конца в \n ) всегда будет выводиться окончательный \n без -z .
И чтобы доказать, что нет NUL добавил:
Чтобы удалить несколько завершающих символов новой строки , выполните следующие действия:
Команда «echo» всегда добавляет новую строку, когда вы запускаете ее в командной консоли. Это удобно, когда вы хотите распечатать переменные окружения и другую информацию. Он разделяет отдельные фрагменты информации в команде и позволяет легко идентифицировать.
Но если вы хотите скопировать вывод и использовать его в другой консоли, дополнительная строка может быть проблемой. Также, если вам нужно использовать команду echo, но вы хотите создать CSV-файл, невидимая строка может сделать ваши усилия тщетными.
В этой статье объясняется, как использовать команду «echo» без создания новой строки для разных платформ.
Как эхо без новой строки в командной строке Windows
Если у вас Windows 10, вы можете получить доступ к командной строке для ввода своих команд. Существуют способы, при которых новая строка может вызвать проблемы, особенно если вы хотите скопировать вывод и использовать его вне командной строки.
Итак, если вы введете «echo 1» в качестве команды в вашем приглашении, вы получите 1 в качестве вывода, за которым следует новая строка и еще одна строка ввода.
Но если вы хотите использовать ту же команду без добавления новой строки, вам нужно ввести дополнительные команды после «echo».
Давайте рассмотрим это шаг за шагом:
- Нажмите одновременно клавиши «Windows» и «R», чтобы открыть окно «Выполнить».
- Введите «cmd» в поле «Открыть».
- Введите следующую команду в командной строке:
эхо | set / p = ваш текст или переменная (в данном примере это «1») - Нажмите «Enter», чтобы выполнить эту команду.
- Вы не должны видеть новую линию между ними.
Если вы хотите скопировать вывод в буфер обмена, вам придется использовать команду «echo» с командой «clip». - Используйте следующий код:
эхо | set / p = ваш текст или переменная | clip - Команда «clip» скопирует текст или переменную в буфер обмена.
- Откройте любой текстовый инструмент. Например, Блокнот.
- Вставьте в него буфер обмена.
- Вы должны увидеть свой вывод в виде строки текста в блокноте.
Как эхо без перевода строки в Bash
Если вы хотите написать более сложные команды или отсортировать все в одной строке, вы должны использовать опцию «-n».
Например, если вы введете код:
для х в $
делать
эхо $ х
сделано | Сортировать
Команда «echo $ x» отсортирует переменные в отдельные строки. Это может выглядеть примерно так:
1
2
3
4
5
Таким образом, он не будет печатать числа в одной строке.
Есть способ отобразить вывод в одной строке; вам нужно только использовать команду «-n».
Это будет выглядеть так:
для х в $
делать
эхо -n $ х
сделано | Сортировать
Нажмите return, и вы должны увидеть числа в одной строке.
Эхо с командой Printf в Bash
Например, давайте использовать следующий код:
NewLine = `printf“ \ n ”`
echo -e «Line1 $ Line2»
Не добавляя пробел после «\ n», вы получите такой результат:
Однако, если вы добавите пробел после «\ n» следующим образом:
NewLine = `printf“ \ n “`
echo -e «Line1 Line2»
Вы получите следующий результат:
Строка 1
Line2
Если по какой-то причине вы хотите, чтобы все ваши данные печатались в одной строке, вы всегда можете использовать первый пример.
А как насчет PowerShell?
Windows PowerShell не создает символ новой строки с помощью команды echo. Но если вы хотите добавить содержимое непосредственно в текстовый файл через PowerShell, вам следует ввести команду «-NoNewline» после текста или переменной.
Это чрезвычайно полезно, например, для создания файла CSV. Или, если по какой-то причине вам нужно, чтобы все ваши переменные оставались в одной строке.
Обратите внимание, что без команды «-NoNewLine» он все равно автоматически переместится на новую строку после достижения конца строки.
Эхо Тора
Теперь, когда вы знаете, как избежать добавления новой строки с помощью echo, вы можете продолжить кодирование.
Если вы знаете о других методах достижения, не забудьте поделиться с сообществом в комментариях. Спасибо заранее.
В этом отрывке вы узнаете про множество интересных и полезных команд по работе с текстовыми данными в Linux. Также даны основы работы с потоками ввода-вывода в bash.
Навигация по основам Linux от основателя Gentoo:
Часть I
Часть II
-
(вступление)
- Обработка текста и перенаправления (итоги и ссылки)
Обработка текста
Возвращаемся к перенаправлению
Ранее в этой серии руководств, мы видели пример использования >, оператора для перенаправления вывода команды в файл, как показано ниже:
$ echo "firstfile" > copyme
Помимо перенаправления вывода в файл, мы можем воспользоваться такой мощной фишкой оболочки как каналы (пайпы). Используя пайпы, мы можем передать вывод одной команды на вход другой. Рассмотрим следующий пример:
Символ | используется для подключения выхода команды слева, ко входу команды справа от него. В примере выше, команда echo печатает в вывод «hi there» с символом перевода строки в конце. Этот вывод обычно появляется в терминале, но канал перенаправляет его на вход команде wc, которая показывает количество строк, слов и символов.
Пример с каналами (пайпами)
Вот другой простой пример:
$ ls -s | sort -n
В этом случае, ls -s обычно вывела бы текущую директорию на терминал, с указанием размера перед каждым файлом. Однако вместо этого, мы передаем вывод программе sort -n, которая численно отсортирует его. Это очень удобно для поиска файлов, которые занимают в директории больше всего места.
Следующие примеры посложнее, они демонстрируют мощь и удобство, которые можно получить используя каналы. Далее мы используем команды, которые еще не были рассмотрены, однако не заостряйте на них свое внимание. Вместо это, сконцентрируйтесь на понимании того, как работают пайпы и как вы можете использовать их в своей повседневной работе с Linux.
Распаковывающий канал
Для разархивации и распаковки файла, вы могли бы сделать следующее:
$ bzip2 -d linux-2.4.16.tar.bz2
$ tar xvf linux-2.4.16.tar
Недостаток такого метода — это создание промежуточного, разархивированного файла на диске. Поскольку tar может читать данные напрямую со своего входа (вместо указанного файла), мы можем получить тот же конечный результат используя пайп:
$ bzip2 -dc linux-2.4.16.tar.bz2 | tar xvf -
Вуухуу! Сжатый тарбол был распакован и мы обошлись без промежуточного файла.
Канал подлиннее
Вот еще один пример пайпа:
$ cat myfile.txt | sort | uniq | wc -l
Мы используем cat для отправки содержимого myfile.txt команде sort. Когда sort получает данные на вход, она сортирует их построчно в алфавитном порядке, и отправляет в таком виде программе uniq. uniq удаляет повторяющиеся строки (кстати uniq, требует отсортированный список на входе) и отправляет результат на wc -l. Мы рассматривали команду wc ранее, но без ее опций. Когда указывается опция -l, то команда выводит только количество строк, количество слов и символов в этом случае не выводятся. Вы увидите, что такой пайп распечатает количество уникальных строк в текстовом файле.
Попробуйте создать пару файлов в вашем текстовом редакторе. Используйте на них данный пайп и посмотрите на результат который вы получите.
Буря обработки текста начинается!
Теперь мы приступим к беглому осмотру команд Linux для стандартной обработки текстов. Поскольку сейчас мы рассмотрим множество программ, у нас не будет места для примеров по каждой из них. Вместо этого, мы призываем вас прочитать man-станицы приведенных команд (набрав man echo, например) и изучить каждую команду с ее опциями, потратив некоторое время на игру с ними. Как правило, эти команды печатают результат обработки на терминал, а не производят модификацию непосредственно файла. После этого беглого обзора, мы поглубже рассмотрим перенаправление ввода-вывода. Так что да, уже виден свет в конце тунеля. :)
echo печатает свои аргументы на терминал. Используйте опцию -e если хотите включить в вывод управляющие последовательности; например echo -e 'foo\nfoo' напечатает foo, затем перейдет на новую строку, затем снова напечатает foo. Используйте опцию -n чтобы запретить echo добавлять символ новой строки в конец вывода, как это сделано по-умолчанию.
cat напечатает содержимое указанного файла на терминал. Удобна как первая команда пайпа, например, cat foo.txt | blah.
sort выведет содержимое файла, указанного в командной строке, в алфавитном порядке. Естественно, sort также может принимать ввод из пайпа. Наберите man sort чтобы ознакомиться с опциями команды, которые управлют вариантами сортировки.
uniq принимает уже отсортированный файл или поток данных (через пайп) и удаляет повторяющиеся строки.
wc выводит количество строк, слов и символов в указанном файле или во входном потоке (из пайпа). Введите man wc чтобы узнать, как настроить вывод программы.
head выводит первые десять строк файла или потока. Используйте опцию -n, чтобы указать, сколько строк должно отображаться.
tail печатает последние десять строк файла или потока. Используйте опцию -n, чтобы указать, сколько строк должно отображаться.
tac похожа на cat, но печатает все строки в обратном порядке, другими словами, последняя строка печатается в первую очередь.
expand конвертирует входные символы табуляции в пробелы. Опция -t указывает размер табуляции.
unexpand конвертирует входные пробелы в символы табуляции. Опция -t указывает размер табуляции.
cut используется для извлечения из входного файла или потока, полей разделенных указанным символом. (попробуйте echo 'abc def ghi jkl' | cut -d ' ' -f2,2 прим. пер.)
Команда nl добавляет к каждой входной строке ее номер. Удобно для распечатки.
pr разбивает файл на страницы и нумерует их; обычно используется для печати.
tr — инструмент трансляции (преобразования) символов; используется для отображения определенных символов во входном потоке на заданные символы в выходной поток.
split — эта команда используется для разделения больших файлов на несколько небольших, более управляемых частей.
fmt используется, чтобы выполнить «перенос» длинных строк текста. Сегодня она не очень полезна, поскольку эта возможность встроена в большинство текстовых редакторов, хотя команда достаточно хороша, чтобы ее знать.
paste принимает два или несколько файлов в качестве входных данных, объединяет построчно и выводит результат. Может быть удобно для создания таблиц или колонок текста.
join похожа на paste, эта утилита позволяет объединять два файла по общему полю (по-умолчанию первое поле в каждой строке).
tee печатает входные аргументы в файл и на экран одновременно. Это полезно, когда вы хотите создать лог для чего-либо, а также хотите видеть процесс на экране.
Буря закончилась! Перенаправление
Как и > в командной строке, вы можете использовать < для перенаправления файла, но уже на вход команде. Для многих команд, можно просто указать имя файла. К сожалению некоторые программы работают только со стандартным потоком ввода.
Bash и другие шелы поддерживают концепцию «herefile». Это позволяет давать входные данные команде в виде набора строк с последующей командой, означающей окончание ввода последовательности значений. Проще всего это показать на примере:
$ sort <<END
apple
cranberry
banana
END
apple
banana
cranberry
В приведенном выше примере, мы вводим слова apple, cranberry и banana, с последующим «END» для указания окончания ввода. Затем программа sort возвращается наши слова в алфавитном порядке.
Использование ">>"
Можно ожидать, >> будет в чем-то похожа на <<, но это не так. Она позволяет просто добавить вывод в файл, а не перезаписывать его каждый раз, как это делает >. Пример:
$ echo Hi > myfile
$ echo there. > myfile
$ cat myfile
there.
Уупс! Мы потеряли часть с «Hi»! А вот что мы имели ввиду:
$ echo Hi > myfile
$ echo there. >> myfile
$ cat myfile
Hi
there.
Об авторах
Daniel Robbins ![]()
Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава Funtoo, написал множество технических статей для IBM developerWorks, Intel Developer Services и C/C++ Users Journal.
Chris Houser
Крис Хаусер был сторонником UNIX c 1994 года, когда присоединился к команде администраторов университета Тэйлора (Индиана, США), где получил степень бакалавра в компьютерных науках и математике. После он работал во множестве областей, включая веб-приложения, редактирование видео, драйвера для UNIX и криптографическую защиту. В настоящий момент работает в Sentry Data Systems. Крис также сделал вклад во множество свободных проектов, таких как Gentoo Linux и Clojure, стал соавтором книги The Joy of Clojure.
Читайте также: