Как поместить символ новой строки в файл с помощью команды 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

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

  • эхо-текст после команды curl на той же строке
  • Как удалить символ новой строки между двумя строками <font> \ n </ font> в unix?
  • Добавление / удаление некоторых вкладок и разрывов строк в HTML-коде с помощью sed
  • Удалите 2 и 3 строки в текстовом файле, но не 1
  • Элегантный способ предотвратить замену команд от удаления конечной строки новой строки
  • Как исправить сообщение «Hunk # 1 FAILED at 1 (different line endings)»?
  • строка shebang не работает с cr-lf
  • Формирование новых строк с печатью подстановок кошки
  • Проблема с горизонтальным слиянием csv-файлов под Cygwin
  • Как пропустить файл в sed, если он содержит регулярное выражение?
  • Количество символов в команде Unix wc
  • Почему `minicom` присоединяет символ` 0xOD` к серийному текстовому сообщению?
  • Linux и Unix - лучшая ОС в мире.