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:

Объяснение:

  1. -v назначение для ORS
  2. 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».

Давайте рассмотрим это шаг за шагом:

  1. Нажмите одновременно клавиши «Windows» и «R», чтобы открыть окно «Выполнить».
  2. Введите «cmd» в поле «Открыть».
  3. Введите следующую команду в командной строке:
    эхо | set / p = ваш текст или переменная (в данном примере это «1»)
  4. Нажмите «Enter», чтобы выполнить эту команду.
  5. Вы не должны видеть новую линию между ними.

    Если вы хотите скопировать вывод в буфер обмена, вам придется использовать команду «echo» с командой «clip».
  6. Используйте следующий код:
    эхо | set / p = ваш текст или переменная | clip
  7. Команда «clip» скопирует текст или переменную в буфер обмена.
  8. Откройте любой текстовый инструмент. Например, Блокнот.
  9. Вставьте в него буфер обмена.
  10. Вы должны увидеть свой вывод в виде строки текста в блокноте.

Как эхо без перевода строки в 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
    (вступление)
  1. Обработка текста и перенаправления (итоги и ссылки)

Обработка текста

Возвращаемся к перенаправлению

Ранее в этой серии руководств, мы видели пример использования >, оператора для перенаправления вывода команды в файл, как показано ниже:

$ 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.

Читайте также: