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

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

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

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

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

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

25 голосов | спросил Abdul Al Hazred 22 MaramSun, 22 Mar 2015 01:56:52 +03002015-03-22T01:56:52+03:0001 2015, 01:56:52

5 ответов


24

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

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

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

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

ответил Janis 22 MaramSun, 22 Mar 2015 02:08:52 +03002015-03-22T02:08:52+03:0002 2015, 02:08:52
22

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

С эхом, предоставляемым 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
ответил Chris Down 22 MaramSun, 22 Mar 2015 02:00:25 +03002015-03-22T02:00:25+03:0002 2015, 02:00:25
4

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

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

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

или

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

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

Тонкая вариация выше:

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

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

Подробнее см. Что такое операторы управления и перенаправления оболочки? .

ответил Scott 22 MaramSun, 22 Mar 2015 09:14:41 +03002015-03-22T09:14:41+03:0009 2015, 09:14:41
2

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

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

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

ответил gardenhead 24 Jam1000000amSun, 24 Jan 2016 05:50:04 +030016 2016, 05:50:04
0

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

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

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

  

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

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

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

  Оператор формата

должен использоваться как строка формата, описанная в XBD Format Format Notation [...]

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

  

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

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

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

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

ответил Ciro Santilli 新疆改造中心 六四事件 法轮功 24 Jam1000000amSun, 24 Jan 2016 02:13:47 +030016 2016, 02:13:47

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132