Bash: добавить текст в файл
В Bash есть несколько способов добавить текст в файл. Эта статья объясняет некоторые из них.
Чтобы добавить текст в файл, у вас должны быть права на запись в него. В противном случае вы получите сообщение об ошибке в разрешении отказано.
Добавить в файл с помощью оператора перенаправления ( >> )
Перенаправление позволяет захватывать выходные данные команды и отправлять их в качестве входных данных в другую команду или файл. Оператор перенаправления >> добавляет вывод в указанный файл.
Существует ряд команд, которые вы можете использовать для вывода текста на стандартный вывод и перенаправления его в файл, причем наиболее часто используются команды echo и printf .
Чтобы добавить текст в файл, укажите имя файла после оператора перенаправления:
При использовании с параметром -e команда echo интерпретирует экранированные символы обратной косой черты, такие как новая строка n :
Чтобы получить более сложный вывод, используйте команду printf которая позволяет вам указать форматирование вывода:
Другой способ добавить текст в файл — использовать документ Here (Heredoc). Это тип перенаправления, который позволяет передавать команде несколько строк ввода.
Например, вы можете передать содержимое команде cat и добавить его в файл:
Вы можете добавить вывод любой команды в файл. Вот пример с командой date :
При добавлении к файлу с использованием перенаправления будьте осторожны, чтобы не использовать оператор > для перезаписи важного существующего файла.
Добавить в файл с помощью команды tee
tee — это утилита командной строки в Linux, которая считывает из стандартного ввода и записывает как в стандартный вывод, так и в один или несколько файлов одновременно.
По умолчанию команда tee перезаписывает указанный файл. Чтобы добавить вывод в файл, используйте tee с параметром -a ( —append ):
Если вы не хотите, чтобы tee выводил данные на стандартный вывод, перенаправьте его на /dev/null :
Преимущество использования команды tee перед оператором >> заключается в том, что tee позволяет добавлять текст сразу в несколько файлов и записывать в файлы, принадлежащие другим пользователям, вместе с sudo .
Чтобы добавить текст в файл, в который у вас нет прав на запись, добавьте sudo перед tee как показано ниже:
tee получает вывод команды echo , повышает разрешения sudo и записывает в файл.
Чтобы добавить текст в несколько файлов, укажите файлы в качестве аргументов команды tee :
Выводы
В Linux для добавления текста в файл используйте оператор перенаправления >> или команду tee .
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
How to Append Text to End of File in Linux?
On Linux, while working with files in a terminal sometimes we need to append the same data of a command output or file content. Append means simply add the data to the file without erasing existing data. Today we are going to see how can we append the text in the file on the terminal.
Using >> Operator:
The >> operator redirects output to a file. If the mentioned file doesn’t exist the file is created and then the text is appended to the file.
Examples:
We can use the echo command to append the text to the file, like
Alternatively, we can use printf command to append text into a file.
We can also use the cat command to append the content of one file to another file.
Example:
In this example, we have to append the content of file file1.txt to the file file2.txt
Note: Don’t use > of >> This will erase the data of the target file. This may cause data loss.
Using tee Command:
The tee command copies the text from standard input and writes it to the standard output file. The tee provides -a option to append the text to the file.
We can also append the content of a file into another file using the tee command
Example:
In this example, we have to append the content of file file1.txt to the file file2.txt
Дописать в файл linux
В этом уроке мы изучаем различные способы добавления текста в конец файла в Linux.
Вы можете добиться этого, используя несколько методов в Linux, но самый простой — перенаправить вывод команды на желаемое имя файла. Используя символ >>, вы можете вывести результат любой команды в текстовый файл.
Другие способы достижения этого — использование инструментов Linux, таких как tee, awk и sed.
Перенаправить вывод команды или данных в конец файла
Каждая операционная система на основе Unix имеет концепцию «места по умолчанию для вывода».
Каждый называет это «стандартный вывод» или «stdout», произносится как standard out.
Ваша оболочка (вероятно, bash или zsh) постоянно следит за местом вывода по умолчанию.
Когда ваша оболочка видит новый вывод, она выводит его на экран, чтобы вы могли его увидеть.
Мы можем перенаправить этот вывод в файл, используя оператор >>.
Процедура выглядит следующим образом:
Добавить текст в конец файла с помощью команды echo:
Добавить вывод команды в конец файла:
Добавление строк в конец файла
Мы можем добавить текстовые строки, используя этот символ перенаправления >> или мы можем записать данные и вывод команды в текстовый файл.
Используя этот метод, файл будет создан, если его не существует.
Добавление результата вывода данных команды в конец файла
Вы также можете добавить данные или запустить команду и добавить вывод в нужный файл.
В этом примере мы будем использовать date для добавления текущей даты в файл, команда uname — которая выведет версию ядра используемой нами системы Linux, и, наконец, команда ls, которая выводит текущую структуру каталогов и список файлов.
Вы можете использовать любую команду, которая может выводить ее результат на терминал, что означает почти все инструменты командной строки в Linux.
Альтернативные методы
Давайте посмотрим, как добавить что-либо в файл с помощью утилиты tee, awk и sed Linux.
Использование инструмента командной строки tee
Команда Tee читает стандартный ввод и записывает его как в стандартный вывод, так и в один или несколько файлов.
Команда названа в честь Т-разветвителя, используемого в сантехнике.
Он прерывает вывод программы, так что вывод может быть отображен и сохранен в файле.
Использование инструмента командной строки awk
Awk — это утилита, которая позволяет программисту писать крошечные, но эффективные программы в форме операторов, определяющих текстовые шаблоны, которые нужно искать в каждой строке документа, и действие, которое нужно предпринять, когда совпадение найдено .
Awk в основном используется для сканирования и обработки шаблонов.
Использование инструмента командной строки sed
Команда Sed в Linux расшифровывается как потоковый редактор (stream editor) и может выполнять множество функций с файлом, таких как поиск, поиск и замена, вставка или удаление.
Используя sed, вы можете редактировать файлы, даже не открывая его, что значительно ускоряет поиск и замену чего-либо в файле.
Добавить несколько строк в файл
Есть несколько способов добавить несколько строк в файл одновременно.
Вы можете, конечно, добавлять строки одну за другой:
Следующий вариант — ввести новую строку в терминале:
Другой способ — открыть файл и писать строки, пока вы не наберете EOT:
Заключение
Хотя есть несколько способов добавить текстовые строки или данные и вывод команд в файл, мы увидели, что самый простой способ — это использовать >> символ перенаправления.
Есть способы добавить текст к концу определенного номера строки в файле или в середине строки с помощью регулярных выражений, но мы рассмотрим это в другой статье.
Дайте нам знать, какой метод для добавления в конец файла вы считаете лучшим в разделе комментариев.
Делить комментариями и добавляйте статьи в соц. сети, если они вам нравятся!
linux-notes.org
Существует довольно много способов как это сделать. Я не расскажу ничего нового, а соберу информацию в одну тему (статью) чтобы можно было новичкам, та и опытным пользователям можно быстро вспомнить.
Вставить текст в файл через утилиту cat в Unix/Linux
Утилита cat, позволяет записывать данные (текс) в файл. Приведу несколько примеров.
-=== ПРИМЕР 1 ===-
- TEXT HERE — произвольный текст, который нужно записать в файл.
- EOF — это команда для завершения записи в файл.
-=== ПРИМЕР 2 ===-
- TEXT HERE — произвольный текст, который нужно записать в файл.
- ^D — Сочетание клавиш «CTRL-D» для завершения записи в файл.
-=== ПРИМЕР 3 ===-
Или можно использовать что-то типа:
Т.е вхождение у меня — TXT. Начало и конец записи регулируется именно этими символами.
Вставить текст в файл через утилиту echo в Unix/Linux
Чтобы вставить какой-то текст в файл с помощью команды echo, можно так (данная команда затрет файл и вставит именно то, что передадите ей):
Или, можно дописать в самый конец файла следующей командой:
Вставить текст в файл через утилиту printf в Unix/Linux
Чтобы вставить какой-то текст в файл с помощью команды printf, можно так (данная команда затрет файл и вставит именно то, что передадите ей):
Или, можно дописать в самый конец файла следующей командой:
Или много строчный текст:
Вставить текст в файл через утилиту tee в Unix/Linux
Например, сделать это можно следующим образом:
Вставить текст в файл через python в Unix/Linux
Можно это сделать (создать файл и прописать в него):
Если появятся еще идеи как можно это сделать (SED — не всчет), дополню данную статью.
Вот и все, статья «Вставить текст в файл в Unix/Linux» завершена.
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.
Вывод в файл 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 место.
What Is Tee?
tee on Linux is a command-line tool, it reads from the standard input and is the capability of writing results to the terminal's standard output and files at the same time. This essentially lets you store and view (both at the same time) the output at any time.
How to Use It?
Let’s illustrate the use of tee with a simple example. We can use a command to ping [google.com](http://google.com)
The output should be displayed only on your screen which is standard output (STDOUT):
Now, let’s try and write the output to a file:
Now, your screen will pretty much be blank and the output will be writing to the file mention on the path
Now, we will tee to do both at the same exact time:
The output this time around will be written to the screen as well as the file:
So, essentially, the command has the following format:
And quite plainly the man page explains it as:
The tee utility copies standard input to standard output, making a copy in zero or more files. The output is unbuffered.
More Options
As you might have stumbled on the man page already, there are more options that can be fed to our tee command. Some of them are:
Append
By default tee command overwrites the file. You can append to the file by using the -a option as shown below:
Write to Multiple Files
You can write to multiple files by just specifying the names or directories of the files:
Conclusion
I think we can all agree that tee is one delightful Linux command. The tool definitely is quite easy to use and has a little-to-no learning curve. But you can always view its man page at any time to know further information.