Echo перенос строки bash: Bash echo с переводом строк
Bash echo перенос строки
Если вы создаете файл и добавляете в него текст с помощью команды echo, то по умолчанию данный текст в конце будет переведен на новую строку (
).
Но данная команда может добавить текст и без перевода на новую строку, если в echo передать параметр -n.
Данная команда запишет текст в файл и в конце выполнит перевод на новую строку:
Но если в эту же команду передать параvетр -n, то перевод на новую строку в конце текст будет пропущен:
Однако, некоторые unix системы игнорируют данный параметр. По этому можно попробовать выполнить команду printf:
Возможно ли в bash после первого слова в файле поставить перенос строки ?
Слово может быть разной длины, поэтому считать символы и ставить перенос после символов не предлагать.
1 ответ 1
sed вас точно спасет
Всё ещё ищете ответ? Посмотрите другие вопросы с метками linux bash или задайте свой вопрос.
Похожие
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.1.10.35756
Команда echo — это очень простая и в то же время часто используемая встроенная команда оболочки Bash. Она имеет только одно назначение — выводить строку текста в терминал, но применяется очень часто в различных скриптах, программах, и даже для редактирования конфигурационных файлов.
В этой статье мы рассмотрим что представляет из себя команда echo linux, как ее можно использовать и в каких ситуациях. Но сначала рассмотрим синтаксис самой команды.
Команда echo linux
Команда echo — это не системная утилита, у нее нет исполняемого файла. Она существует только внутри интерпретатора Bash. Синтаксис команды echo linux очень прост:
$ echo опции строка
Опций всего несколько, давайте рассмотрим их, чтобы вы могли лучше ориентироваться в работе утилиты:
- -n — не выводить перевод строки;
- -e — включить поддержку вывода Escape последовательностей;
- -E — отключить интерпретацию Escape последовательностей.
Это все опции, если включена опция -e, то вы можете использовать такие Escape последовательности для вставки специальных символов:
- /c — удалить перевод строки;
- /t — горизонтальная табуляция;
- /v — вертикальная табуляция;
- /b — удалить предыдущий символ;
- /n — перевод строки;
- /r — символ возврата каретки в начало строки.
Пожалуй, это все, что нужно знать о команде echo, а теперь давайте рассмотрим как с ней работать.
Примеры работы echo
Давайте рассмотрим как пользоваться echo. Сначала просто выведем строку на экран:
echo Linux Open Source Software Technologies
Также можно вывести значение переменной. Сначала объявим переменную:
Затем выведем ее значение:
echo Наш сайт $VAR
Как уже говорилось, с помощью опции -e можно включить интерпретацию специальных последовательностей. Последовательность позволяет удалить предыдущий символ. Например, удалим все пробелы из строки:
echo -e «Linux open source software technologies»
Последовательность
переводит курсор на новую строку:
echo -e «Linux
open
source
software
technologies»
С помощью вы можете добавить горизонтальные табуляции:
echo -e «Linux open source software technologies»
Можно совместить переводы строки и табуляции:
echo -e «Linux nopen nsource nsoftware ntechnologies»
Точно так же можно применить вертикальную табуляцию:
echo -e «Linux vopen vsource vsoftware vtechnologies»
С помощью последовательности
можно удалить все символы до начала строки:
echo -e «Linux
open source software technologies»
Последовательность -c позволяет убрать перевод на новую строку в конце сообщения:
echo -e «Linux open source software technologiesc»
Дальше — больше. Вы можете разукрасить вывод echo с помощью последовательностей управления цветом Bash. Для доступны такие цвета текста:
Форматирование вывода команды echo с помощью специальных последовательностей символов
В предыдущей статье было рассмотрено, что при включенной опции -e
команды echo
в Bash включается режим форматирования в виде набора специальных символов. Весь список специальных символов для форматированного вывода можно посмотреть в инструкции к этой команде. О том как её вызвать и то, что в ней написано, можно посмотреть в → этой статье. Ниже разберём все спец.символы для форматирования вывода команды echo
в Bash для Debian 9.
\\
— вывод обратного слеша
Если в текстовом выводе нужно вывести символ обратного слэша, то его нужно задвоить, тогда он будет выведен в качестве результата:
root@server:~# echo -e "\\ backslash"
\ backslash
\a
— вывод звукового сигнала
При использовании этого варианта форматирования выдаётся звуковой сигнал. Ничего другого не происходит, символ на вывод не выдаётся.
root@server:~# echo -e "\a alert (BEL)"
alert (BEL)
\b
— удаление предыдущего символа
Если нужно удалить последний символ в выводимой строке, то нужно воспользоваться сочетанием \b, который равнозначен нажатию кнопки «Забой» / «Backspace» на клавиатуре:
root@server:~# echo -e "1234\b\b\b56\b789"
15789
В конце строки этот символ ведёт себя как-то непредсказуемо:
root@server:~# echo -e "1234\b\b\b56\b78999\b\b\b12"
1578129
\с
— убрать перевод на новую строку в конце строки
Очень похоже на опцию -n
, рассмотренную в предыдущей статье, но может применяться не ко всей последовательности выводимой командой echo
, а к конкретной строке:
root@amorale:~# echo -e "test -1-\ntest -2-\c"
test -1-
test -2-root@amorale:~#
\e
— убрать следующий символ
Последовательность \e
(escape) позволяет убрать символ, следующий за ней:
root@server:~# echo -e "test \e1\e2\e34\ntest -2-"
test 4
test -2-
\f
— поле формы
Пока не ясно, что делает, кроме того, что очищает вывод в консоли
root@server:~# echo -e "\f"
\n
— символ перевода строки
Для того, чтобы разбить текст на разные строки, можно использовать последовательность \n
:
root@server:~# echo -e "пишем\nс новой строки"
пишем
с новой строки
\r
— удалить все символы до начала строки
Последовательность \r
позволяет удалить все символы до начала строки, оставив только то, что после неё:
root@serer:~# echo -e "мы писали\nмы писали\rнаши пальчики устали"
мы писали
наши пальчики устали
\t
— символ горизонтальной табуляция
\t
позволяет вставлять горизонтальную табуляцию (сколько пробелов составляет горизонтальная табуляция настраивается отдельно):
root@server:~# echo -e "мы писали\tмы писали\tнаши пальчики устали"
мы писали мы писали наши пальчики устали
\v
— символ вертикальной табуляции
\v
позволяет вставлять горизонтальную табуляцию и делать красивые одинаковые отступы:
root@amorale:~# echo -e "мы писали\vмы писали\vнаши пальчики устали\nмы писали\vмы писали\vнаши пальчики устали"
мы писали
мы писали
наши пальчики устали
мы писали
мы писали
наши пальчики устали
Резюме
На этом набор специальных символов форматирования вывода команды echo
можно считать полным.
Остались ещё символы для окрашивания цветом выводимого текста, но об этом в другой раз. =)
Заберите ссылку на статью к себе, чтобы потом легко её найти 😉
Выберите, то, чем пользуетесь чаще всего:
Спасибо за внимание, оставайтесь на связи! Ниже ссылка на форум и обсуждение ; )
Команда tr в Linux с примерами
Команда tr (translate) используется в Linux в основном для преобразования и удаления символов. Она часто находит применение в скриптах обработки текста. Ее можно использовать для преобразования верхнего регистра в нижний, сжатия повторяющихся символов и удаления символов.
Команда tr требует два набора символов для преобразований, а также может использоваться с другими командами, использующими каналы (пайпы) Unix для расширенных преобразований.
В этой статье мы узнаем, как использовать команду tr в операционных системах Linux и рассмотрим некоторые примеры.
Команда tr и ее синтаксис
Ниже приведен синтаксис команды tr. Требуется, как минимум, два набора символов и опции.
tr [options] "SET1" "SET2"
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:
echo "something to translate" | tr "SET1" "SET2"
tr "SET1" "SET2" < file-to-translate
tr "SET1" "SET2" < file-to-translate > file-output
Вот некоторые опции:
-c
, -C
, --complement
-> удалить все символы, кроме тех, что в первом наборе-d
, --delete
-> удалить символы из первого набора-s
, --squeeze-repeats
-> заменять набор символов, которые повторяются, из указанных в последнем наборе знаков
1) Заменить все строчные буквы на заглавные
Мы можем использовать tr для преобразования нижнего регистра в верхний или наоборот.
Просто используем наборы [:lower:] [:upper:]
или "a-z" "A-Z"
для замены всех символов.
Вот пример, как преобразовать в Linux с помощью команды tr все строчные буквы в заглавные:
$ echo "hello linux world" | tr [:lower:] [:upper:] HELLO LINUX WORLD
А сейчас сделаем замену из файла input.txt
$ cat input.txt hi this is text $ tr "a-z" "A-Z" < input.txt HI THIS IS TEXT $ cat input.txt hi this is text
Как мы видим, в файле ничего не изменилось, осталось все строчными буквами. Чтобы изменения были в файле, на необходимо перевести вывод в новый файл. Например, в output.txt
$ tr "a-z" "A-Z" < input.txt > output.txt $ cat output.txt HI THIS IS TEXT
Кстати, в команде sed есть опция y которая делает то же самое (sed ‘y/SET1/SET2’)
2) Удаление символов с помощью tr
Опция -d
используется для удаления всех символов, которые указаны в наборе символов.
Следующая команда удалит все символы из этого набора ‘aei’.
$ echo "hi this is example text" | tr -d "aei" h ths s xmpl txt
Следующая команда удалит все цифры в тексте. Будем использовать набор [:digit:] , чтобы определить все цифры.
$ echo "1 please 2 remove 3 all 4 digits" | tr -d [:digit:] please remove all digits
А вот пример команд, которыми можно удалить переносы на новые строки
$ tr -d '\n' < file.txt or $ tr -d '2' < file.txt
3) Удаление ила змена символов НЕ в наборе
С помощью параметра -c Вы можете сказать tr заменить все символы, которые Вы не указали в наборе. Приведем пример.
$ echo "a1b2c3d4" | tr -c 'abcd' '0' a0b0c0d0
А вот пример удаления, просто укажем опцию -d и только один набор (символы которого удалять НЕ надо, а остальные удалить)
$ echo "12345 abcd 67890 efgh" | tr -cd [:digit:] abcd efgh
4) Замена пробелов на табуляцию
Для указания пробелов используем — [:space:] , а для табуляции — \t.
$ echo "1 2 3 4" | tr [:space:] '\t' 1 2 3 4
5) Удаление повторений символов
Это делает параметр -s . Рассмотрим пример удаления повторов знаков.
$ echo "many spaces here" | tr -s " " many spaces here
Или заменим повторения на символ решетки
$ echo "many spaces here" | tr -s '[:space:]' '#' many#spaces#here
6) Заменить символы из набора на перенос строки
Сделаем так, чтобы все буквы были заменены на перенос новой строки:
$ cat file.txt one 1 two 2 three 3 four 4 five 5 $ cat file.txt | tr -s "[:alpha:]" "\n" 1 2 3 4 5
7) Генерируем список уникальных слов из файла
Это иногда очень полезная команда, когда необходимо определить количество повторений и вывести уникальные слова из файла:
$ cat file.txt word1 word1 word2 word3 word4 word4 $ cat file.txt | tr -cs "[:alnum:]" "\n" | sort | uniq -c | sort -rn 2 word4 2 word1 1 word3 1 word2
8) Кодируем символы с помошью ROT
ROT (Caesar Cipher) — это тип криптографии, в котором кодирование выполняется путем перемещения букв в алфавите к его следующей букве.
Давайте проверим, как использовать tr для шифрования.
В следующем примере каждый символ в первом наборе будет заменен соответствующим символом во втором наборе.
Первый набор [a-z] (это значит abcdefghijklmnopqrstuvwxyz). Второй набор [n-za-m] (который содержит pqrstuvwxyzabcdefghijklmn).
tr 'a-z' 'p-za-n'
Простая команда для демонстрации вышеуказанной теории:
$ echo 'abg' | tr 'ab' 'ef' efg
Полезно при шифровании электронных адресов:
$ echo '[email protected]' | tr 'A-Za-z' 'N-ZA-Mn-za-m [email protected]
Вывод
tr — это очень мощная команда линукс при использовании пайпов Unix и очень часто используется в скриптах. Дополнительную информацию об этой утилите всегда можно найти в man.
Если у Вас есть какие-либо дополнения, не стесняйтесь пишите в комментариях.
Вывод в файл Bash в Linux
Часто возникает необходимость, чтобы скрипт командного интерпретатора Bash выводил результат своей работы. По умолчанию он отображает стандартный поток данных — окно терминала. Это удобно для обработки результатов небольшого объёма или, чтобы сразу увидеть необходимые данные.
В интерпретаторе можно делать вывод в файл Bash. Применяется это для отложенного анализа или сохранения массивного результата работы сценария. Чтобы сделать это, используется перенаправление потока вывода с помощью дескрипторов.
Содержание статьи:
Стандартные дескрипторы вывода
В системе GNU/Linux каждый объект является файлом. Это правило работает также для процессов ввода/вывода. Каждый файловый объект в системе обозначается дескриптором файла — неотрицательным числом, однозначно определяющим открытые в сеансе файлы. Один процесс может открыть до девяти дескрипторов.
В командном интерпретаторе Bash первые три дескриптора зарезервированы для специального назначения:
Дескриптор | Сокращение | Название |
---|---|---|
0 | STDIN | Стандартный ввод |
1 | STDOUT | Стандартный вывод |
2 | STDERR | Стандартный вывод ошибок |
Их предназначение — обработка ввода/вывода в сценариях. По умолчанию стандартным потоком ввода является клавиатура, а вывода — терминал. Рассмотрим подробно последний.
Вывод в файл Bash
1. Перенаправление стандартного потока вывода
Для того, чтобы перенаправить поток вывода с терминала в файл, используется знак «больше» (>).
#!/bin/bash
echo "Строка 1"
echo "Промежуточная строка" > file
echo "Строка 2" > file
Как результат, «Строка 1» выводится в терминале, а в файл file записывается только «Строка 2»:
Связано это с тем, что > перезаписывает файл новыми данными. Для того, чтобы дописать информацию в конец файла, используется два знака «больше» (>>).
#!/bin/bash
echo "Строка 1"
echo "Промежуточная строка" > file
echo "Строка 2" >> file
Здесь «Промежуточная строка» перезаписала предыдущее содержание file, а «Строка 2» дописалась в его конец.
Если во время использования перенаправления вывода интерпретатор обнаружит ошибку, то он не запишет сообщение о ней в файл.
#!/bin/bash
ls badfile > file2
echo "Строка 2" >> file2
В данном случае ошибка была в том, что команда ls не смогла найти файл badfile, о чём Bash и сообщил. Но вывелось сообщение в терминал, а не записалось в файл. Всё потому, что использование перенаправления потоков указывает интерпретатору отделять мух от котлет ошибки от основной информации.
Это особенно полезно при выполнении сценариев в фоновом режиме, где приходится предусматривать вывод сообщений в журнал. Но так как ошибки в него писаться не будут, нужно отдельно перенаправлять поток ошибок для того, чтобы выполнить их вывод в файл Linux.
2. Перенаправление потока ошибок
В командном интерпретаторе для обработки сообщений об ошибках предназначен дескриптор STDERR, который работает с ошибками, сформированными как от работы интерпретатора, так и самим скриптом.
По умолчанию STDERR указывает в то же место, что и STDOUT, хотя для них и предназначены разные дескрипторы. Но, как было показано в примере, использование перенаправления заставляет Bash разделить эти потоки.
Чтобы выполнить перенаправление вывода в файл Linux для ошибок, следует перед знаком«больше» указать дескриптор 2.
#!/bin/bash
ls badfile 2> errors
echo "Строка 1" > file3
echo "Строка 2" >> file3
В результате работы скрипта создан файл errors, в который записана ошибка выполнения команды ls, а в file3 записаны предназначенные строки. Таким образом, выполнение сценария не сопровождается выводом информации в терминал.
Пример того, как одна команда возвращает и положительный результат, и ошибку:
ls -lh test badtest 2> errors
Команда ls попыталась показать наличие файлов test и badtest. Первый присутствовал в текущем каталоге, а второй — нет. Но сообщение об ошибке было записано в отдельный файл.
Если возникает необходимость выполнить вывод команды в файл Linux, включая её стандартный поток вывода и ошибки, стоит использовать два символа перенаправления, перед которыми стоит указывать необходимый дескриптор.
ls -lh test test2 badtest 2> errors 1> output
Результат успешного выполнения записан в файл output, а сообщение об ошибке — в errors.
По желанию можно выводить и ошибки, и обычные данные в один файл, используя &>.
ls -lh test badtest &> output
Обратите внимание, что Bash присваивает сообщениям об ошибке более высокий приоритет по сравнению с данными, поэтому в случае общего перенаправления ошибки всегда будут располагаться в начале.
Временные перенаправления в скриптах
Если есть необходимость в преднамеренном формировании ошибок в сценарии, можно каждую отдельную строку вывода перенаправлять в STDERR. Для этого достаточно воспользоваться символом перенаправления вывода, после которого нужно использовать & и номер дескриптора, чтобы перенаправить вывод в STDERR.
#!/bin/bash
echo "Это сообщение об ошибке" >&2
echo "Это нормальное сообщение"
При выполнении программы обычно нельзя будет обнаружить отличия:
Вспомним, что GNU/Linux по умолчанию направляет вывод STDERR в STDOUT. Но если при выполнении скрипта будет перенаправлен поток ошибок, то Bash, как и полагается, разделит вывод.
Этот метод хорошо подходит для создания собственных сообщений об ошибках в сценариях.
Постоянные перенаправления в скриптах
Если в сценарии необходимо перенаправить вывод в файл Linux для большого объёма данных, то указание способа вывода в каждой инструкции echo будет неудобным и трудоёмким занятием. Вместо этого можно указать, что в ходе выполнения данного скрипта должно осуществляться перенаправление конкретного дескриптора с помощью команды exec:
#!/bin/bash
exec 1> testout
echo "Это тест перенаправления всего вывода"
echo "из скрипта в другой файл"
echo "без использования временного перенаправления"
Вызов команды exec запускает новый командный интерпретатор и перенаправляет стандартный вывод в файл testout.
Также существует возможность перенаправлять вывод (в том числе и ошибок) в произвольном участке сценария:
#!/bin/bash
exec 2> testerror
echo "Это начально скрипта"
echo "И это первые две строки"
exec 1> testout
echo "Вывод сценария перенаправлен"
echo "из с терминала в другой файл"
echo "но эта строка записана в файл ошибок" >&2
Такой метод часто применяется при необходимости перенаправить лишь часть вывода скрипта в другое место, например в журнал ошибок.
Выводы
Перенаправление в скриптах Bash, чтобы выполнить вывод в файл Bash, является хорошим средством ведения различных журналов, особенно в фоновом режиме.
Использование временного и постоянного перенаправлений в сценариях позволяет создавать собственные сообщения об ошибках для записи в отличное от STDOUT место.
Оцените статью:
Загрузка…
linux — сценарий bash читается построчно и выводится в файл
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
bash — Как вставить новую строку в сценарий оболочки Linux?
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.