Как поместить символ новой строки в файл с помощью команды echo и оператора перенаправления?

Я хотел бы создать файл с помощью команды echo и оператора перенаправления, файл должен состоять из нескольких строк.

Я попытался включить новую строку в строку "\ n" внутри строки:

echo "first line\nsecond line\nthirdline\n" > foo 

но таким образом не создается файл с тремя строками, а файл с одной строкой и дословным содержимым строки.

Как я могу создать, используя только эту команду файл с несколькими строками?

5 Solutions collect form web for “Как поместить символ новой строки в файл с помощью команды echo и оператора перенаправления?”

Вы попросили использовать некоторый синтаксис с командой echo :

 echo $'first line\nsecond line\nthirdline' > foo 

(Но рассмотрите также другой ответ, который вы получили.)

Конструкция $'...' расширяет встроенные escape-последовательности ANSI.

Реализация эха с символьными экранами определяется реализацией. Во многих реализациях эха (включая большинство современных) строка, переданная по умолчанию, вообще не проверяется на escapes.

С эхом, предоставляемым GNU bash (как встроенным) и некоторыми другими вариантами эха, вы можете сделать что-то вроде следующего:

 echo -en 'first line\nsecond line\nthird line\n' > file 

Тем не менее, это действительно звучит так, как будто вы хотите printf , который более читабельен для моего глаза и более переносимый (он имеет эту функцию, определенную POSIX):

 printf '%s\n' 'first line' 'second line' 'third line' > file 

Вы также можете использовать документ здесь :

 cat > file << 'EOF' first line second line third line EOF 

Вот несколько других способов создания многострочного файла с помощью команды echo :

 echo "first line" > foo echo "second line" >> foo echo "third line" >> foo 

где вторая и третья команды используют оператор >> redirection, что приводит к добавлению (добавлению) вывода команды к файлу (который уже должен существовать к этой точке).

Или

 (echo "first line"; echo "second line"; echo "third line") > foo 

где скобки группируют команды echo в один подпроцесс, который выглядит и действует как любая отдельная программа, которая выводит несколько строк (например, ls , например).

Тонкая вариация вышеизложенного

 { echo "first line"; echo "second line"; echo "third line";} > foo 

Это немного более эффективно, чем второй ответ, поскольку он не создает подпроцесс. Однако синтаксис немного сложнее: обратите внимание, что после { и точки с запятой перед } должно быть пробел.

См. Каковы операторы управления и перенаправления оболочки? Чтобы получить больше информации.

Чтобы дать еще один вариант, вы можете просто нажать Enter (т. Е. Буквальную новую строку):

 $ echo "the rain in spain > falls mainly on the plain" > foo 

Обратите внимание, что вы не набираете > в начале второй строки. Это вспомогательное приглашение оболочки, $PS2 , которое оболочка печатает, когда вы вводите неполную команду (например, в данном случае команду с непревзойденным символом кавычки).

POSIX 7 говорит, что вы не можете

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html

-e не определяется, а обратные слэши определяются реализацией:

Если первым операндом является -n, или если какой-либо из операндов содержит символ <обратная косая черта>, результаты определяются по реализации.

если у вас нет дополнительного расширения XSI.

Поэтому используйте printf вместо:

format используется как строка формата, описанная в XBD Format Format Notation […]

Обозначение формата файла :

\ n <новая строка> Переместите положение печати в начало следующей строки.

Также имейте в виду, что Ubuntu 15.10 и большинство дистрибутивов реализуют echo как:

  • встроенный Bash: help echo
  • автономный исполняемый файл: which echo

что может привести к некоторой путанице.

  • Разделение файла по размеру, но убедитесь, что оно заканчивается символом новой строки
  • Автоматическое преобразование новых строк в присвоении переменной оболочки
  • Как заменить слово новой строкой
  • Как заставить nano действовать как vi, когда дело доходит до переноса текста?
  • \ n печатает n вместо новой строки при использовании sed в MaxOSX
  • Почему последовательность CR (\ r) вводится в файл .vimrc?
  • Как читать '\ n' в переменную с помощью встроенной команды Bash?
  • Как захватить stdin в переменную без удаления любых завершающих строк?
  • Почему терминал отправляет CR, даже если установлен ICRNL?
  • uniq показывает повторяющиеся строки
  • Баш читал с разделителем прошлых строк
  • Interesting Posts

    Ubuntu 16.04 Как легко переключаться в Wicd Network Manager?

    Большая катастрофа из ниоткуда?

    В чем преимущество логического рабочего каталога?

    Безопасное извлечение usb из устройства linux

    Для сценария запуска init.d, какой идеальный пользователь использовать в качестве владельца этого процесса

    Эффективно экономить пару каждой строки с линиями другого файла

    ACL для пользователя binddn для PAM?

    Как использовать inotify или именованные каналы через SSHFS?

    UDEV: Как использовать спецификатор замещения% s {file}?

    Как отобразить данные сертификата TLS сервера в терминале?

    Как установить (и проверить) сетевые драйверы Windows в linux (mint)

    Как создать файл ico с более чем одним изображением

    Игнорирование /etc/logrotate.conf из-за плохого режима файла

    использовать загрузочный диск для перенаправления на флешку

    Клиент OpenVPN получает новый ip для каждой загрузки, как получить тот же адрес в x время ожидания?

    Linux и Unix - лучшая ОС в мире.