Linux терминал перенос строки

How can I have a newline in a string in sh?

What should I do to have a newline in a string? Note: This question is not about echo. I’m aware of echo -e , but I’m looking for a solution that allows passing a string (which includes a newline) as an argument to other commands that do not have a similar option to interpret \n ‘s as newlines.

13 Answers 13

If you’re using Bash, you can use backslash-escapes inside of a specially-quoted $’string’ . For example, adding \n :

STR=$'Hello\nWorld' echo "$STR" # quotes are required here! 

If you’re using pretty much any other shell, just insert the newline as-is in the string:

Bash recognizes a number of other backslash escape sequences in the $» string. Here is an excerpt from the Bash manual page:

Words of the form $'string' are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard. Backslash escape sequences, if present, are decoded as follows: \a alert (bell) \b backspace \e \E an escape character \f form feed \n new line \r carriage return \t horizontal tab \v vertical tab \\ backslash \' single quote \" double quote \nnn the eight-bit character whose value is the octal value nnn (one to three digits) \xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) \cx a control-x character The expanded result is single-quoted, as if the dollar sign had not been present. A double-quoted string preceded by a dollar sign ($"string") will cause the string to be translated according to the current locale. If the current locale is C or POSIX, the dollar sign is ignored. If the string is translated and replaced, the replacement is double-quoted. 

Источник

How to Echo Newline in Bash

In Bash, there are multiple ways we can display a text in the console or terminal. We can use either the echo or printf command to print a text. Each of these commands has their unique behaviors.

In this guide, we’ll learn how to print a newline in Bash.

Newline in Bash

Before going further, here’s a quick refresh on what a newline is. It’s usually used to specify the end of a line and to jump to the next line. It’s expressed with the character “\n” in UNIX/Linux systems. Most text editors will not show it by default.

Читайте также:  Checking dns in linux

Printing Newline in Bash

There are a couple of different ways we can print a newline character. The most common way is to use the echo command. However, the printf command also works fine.

Using the backslash character for newline “\n” is the conventional way. However, it’s also possible to denote newlines using the “$” sign.

Printing Newline Using Echo

The echo command takes a string as input and prints it out on the console screen. To print any text, we use the echo command in the following manner:

As mentioned earlier, the newline character is “\n”, right? How about we try to include it directly with echo?

Well, that didn’t go as expected. What happened?

By default, the echo command will print the string provided, character by character. It doesn’t interpret backslash characters. However, we can fix this by adding the flag “-e”. It enables backslash character interpretation. Let’s fix the command and run it again:

Voila! Now it’s working as expected!

This technique also works when using Bash variables. Take a look at the following example:

$ sentence = «The \n Quick \n Brown \n Fox»

Printing Newline Using $

We can also use the “$” sign with the echo command to specify the newline character. This method is a bit more complex than the previous one. The explanation is best done with an example.

Run the following command:

  • The given string isn’t inside double quotations.
  • Before each newline character “\n”, we’re using the “$” sign.
  • Each newline character “\n” is provided inside single quote.

Printing Newlines with Multiple Echo Statements

In this approach, we’re basically going to run multiple echo commands instead of one. By default, echo prints the given string and adds a newline character at the end. By running multiple echo statements at once, we’re taking advantage of that.

Let’s have a look at the following example.

  • We’re running 4 echo commands.
  • Each command is separated by a semicolon (;). It’s the default delimiter in Bash.

Printing Newline with Printf

Similar to echo, the printf command also takes a string and prints it on the console screen. It can be used as an alternative to the echo command.

Have a look at the following example.

As you can see, printf processes backslash characters by default, no need to add any additional flags. However, it doesn’t add an additional newline character at the end of the output, so we have to manually add one.

Final Thoughts

In this guide, we’ve successfully demonstrated how to print newlines in Bash. The newline character is denoted as “\n”. Using both the echo and printf commands, we can print strings with new lines in them. We can also cheat (well, technically) by running the same tool multiple times to get the desired result.

For more in-depth info about echo and printf, refer to their respective man pages.

Interested in Bash programming? Bash is a powerful scripting language that can perform wonders. Check out our Bash programming section. New to Bash programming? Get started with this simple and comprehensive guide on Bash scripting tutorials for beginners.

Читайте также:  Символы в терминале linux

About the author

Sidratul Muntaha

Student of CSE. I love Linux and playing with tech and gadgets. I use both Ubuntu and Linux Mint.

Источник

Перенос строки в терминале

Приветствую! Может кто знает, как решить проблему. Когда работаешь в обычном терминале Ubuntu и вводишь длинную команду, то доходя до конца окна терминала она не переноситься на новую строку, а продолжает печать символы в той же строке. В итоге все смешивается в кашу. Куда копать?

И тег [ code ] [ /code ] не забывай.

Проблема наблюдается в том терминале где ты уже что-то делал или в новооткрытом тоже?

Xenius ★★★★★ ( 20.11.18 14:46:55 MSK )
Последнее исправление: Xenius 20.11.18 14:50:11 MSK (всего исправлений: 2)

ты точно в терминале а не в эмуляторе терминала?

stty -a speed 38400 baud; rows 25; columns 51; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ; eol2 = ; swtch = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0; -parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc 

В любом открытом. Приходится разворачивать на полный экран, чтобы команды не обрезались.

Ну глюк странный конечно. Можешь пользоваться другим эмулятором терминала вместо gnome-terminal, например xterm или konsole

Обрати внимание на: rows 25; columns 51; Это значит, что устройство думает, что у тебя в терминале 51 символ на строку. Проверь, если ты расширяешь и сжимаешь окно терминала, это число меняется?

Командой вроде этой можно установить размер терминала, после этого должно быть нормально:

Очень странный! Рылся в Google, но тщетно.

Значения действительно меняются в зависимости от размера окна терминала. Если установить по Вашей команде, то значения перестают меняться, но сбрасывается, если открыть новый терминал.

Вероятно, мне стоит закинуть ее в .bashrc

И дополнительно, если зайти на сервере по SSH, то все в порядке, а на локальном компьютере проблема. Проблема в локальных настройках 100%, но вот пытаюсь понять, где смотреть.

Значения действительно меняются в зависимости от размера окна терминала. Если установить по Вашей команде, то значения перестают меняться, но сбрасывается, если открыть новый терминал.

Ну ладно, а после этой команды перенос начинает работать? (если размер установить совпадающий с размером окна)

Для проверки запусти vim или less, должен быть на всё окно.

Вероятно, мне стоит закинуть ее в .bashrc

Вряд ли это хорошая идея, это временный ворэкраунд

Проблема в локальных настройках 100%, но вот пытаюсь понять, где смотреть.

Ну у тебя терминал на libvte, так что проверь:

1) Есть ли проблема в xterm или другом терминале НЕ на vte 2) Есть ли проблема в других терминалах на vte (например xfce Terminal)

Тогда будет понятно, в настройках VTE проблема, в настройках gnome-terminal или более глобальная. Я полагаю что vte, мне эта либа вообще не нравится.

Читайте также:  Linux terminal server project

Большое спасибо за помощь!

Да, закидывать в .bashrc — плохая идея.

Если установить команду, то терминал хорошо отображает длину строки, но в vim все превращается в кашу 🙂

Я проверю другие терминалы. Буду копать туда.

Ловил такие проблемы из-за неправильных настроек цветов и прочих свистоперделок, попробуй сбросить на дефолт.

Да! Проблема была в настройках приглашения в систему. Я менял ее, делал более минималистичной.

Вопрос решен. Всем спасибо за помощь!

И что это значит, что ты поменял и в каких файлах?

Это от неправильного $PS1. «Закрывай» \] то, что не выводится в консоль.

Все равно не понял, что такое $PS1, и в каком файле нужно прописать [esc-sequence]?

Все равно не понял, что такое $PS1, и в каком файле нужно прописать

Если где-либо меняли переменную окружения PS1 (вид приглашения комстроки bash и совместимых оболочек) на что-либо и в нее были включены какие-либо неотображаемые символы (например, команды ANSI), то каждую непрерывную группу таких символов нужно обрамлять скобками «\[» в начале и «\]» в конце группы. Тогда bash, подсчитывая длину приглашения, вычтет из реальной длины строки приглашения длину невидимой части, что позволит избежать глюков от неправильного переноса строки по границе окна терминала.

bormant ★★★★★ ( 23.11.19 19:18:00 MSK )
Последнее исправление: bormant 23.11.19 19:18:45 MSK (всего исправлений: 1)

Источник

как добавить перенос строки

Подскажите, как в bash в конец текствого файла добавить перенос на новую строку?

Re: как добавить перенос строки

Ты уже утомил дурными вопросами. Это просто неуважение к форуму.

Re: как добавить перенос строки

Солидарен с sdio. Попробуй хотя бы книжку какую-нибудь почитать.

Re: как добавить перенос строки

Вот нада все подобные вопросы закинуть в FAQ, и потом кричать: В FAQ с****ы дети (с)LOR

Re: как добавить перенос строки

Закидывай, к lor-wiki у тебя доступ есть.

Re: как добавить перенос строки

😀
В голову пришло:
for i in `cat 1`; do echo «$i» >> 2; done; echo «» >> 2; mv 2 1

Re: как добавить перенос строки

ну ессно 1 это у нас файл в котором нужно добавить пуструю строку в конец

Re: как добавить перенос строки

что-то у тебя как-то сложно или я задачу не правильно понял мне по описанию задачи в голову пришло только echo -e «\n» >> file

Re: как добавить перенос строки

=)
Да че первое в голову пришло то и написал

Re: как добавить перенос строки

Re: как добавить перенос строки

-en, а то два переноса добавишь

Re: как добавить перенос строки

Re: как добавить перенос строки

Ну что ж вы преднамеренно товарищу усложняете задачу? Еще оставите самое плохое впечатление от unix/linux и человек навсегда свернет с истинного пути. Доставит человече нужных утилит и задача решается совершенно тривиально: ps aux | grep $$ | tail -1 | uuencode -m - | head -1 | gzip -cf | bzip2 -c | hexdump | tr ' ' '\n' | sort | uniq | grep -E '^$ >> file.txt И все. Видите, как легко. Уверен - пример не идеален, его еще можно и нужно оптимизировать, для того чтобы подняться до уровня тантризма командной строки и наконец-то постичь богов восточного склона Цзи-Чжу в bash.

Источник

Оцените статью
Adblock
detector