Одна из наиболее распространенных задач при написании сценариев Bash или работе в командной строке Linux — это чтение и запись файлов.
В этой статье объясняется, как записать текст в файл в Bash с помощью операторов перенаправления и команды tee
.
Содержание
Запись в файл с использованием операторов перенаправления
В Bash перенаправление вывода позволяет вам захватить вывод команды и записать его в файл.
Общий формат перенаправления и записи вывода в файл следующий:
output > filename
output >> filename
- Оператор перенаправления
>
записывает вывод в указанный файл. Если файл существует, он обрезается до нулевой длины. В противном случае файл создается. Будьте особенно осторожны при использовании этого оператора, так как вы можете перезаписать важный файл. - Оператор перенаправления
>>
добавляет вывод в указанный файл. Если файл не существует, он создается.
У вас должны быть права на запись в файл. В противном случае вы получите сообщение об ошибке в разрешении отказано.
Вот простой пример, показывающий, как перенаправить вывод команды echo
в файл:
echo "this is a line" > file.txt
Чтобы предотвратить перезапись существующих файлов, включите опцию «noclobber» с помощью встроенной команды set
:
set -o noclobber
echo "this is a line" > file.txt
bash: file.txt: cannot overwrite existing file
>|
оператор позволяет вам переопределить параметр Bash «noclobber»
set -o noclobber
echo "this is a line" >| file.txt
Оператор >>
добавляет вывод в конец файла, а не перезаписывает файл:
echo "this is a line" >> file.txt
Используйте команду printf
если вы хотите создать сложный вывод:
printf "Hello, I'm %s.n" $USER > file.txt
Если вы хотите записать несколько строк в файл, используйте перенаправление документа Here (Heredoc).
Например, вы можете передать содержимое команде cat
и записать его в файл:
cat << EOF > file.txt
The current working directory is: $PWD
You are logged in as $(whoami)
EOF
Чтобы добавить строки, замените >
на >>
перед именем файла:
cat << EOF >> file.txt
The current working directory is: $PWD
You are logged in as $(whoami)
EOF
Вы можете записать вывод любой команды в файл:
date +"Year: %Y, Month: %m, Day: %d" > file.txt
Вывод команды date
будет записан в файл.
Запись в файл с помощью команды tee
Команда tee
читает из стандартного ввода и записывает как в стандартный вывод, так и в один или несколько файлов одновременно.
echo "this is a line" | tee file.txt
По умолчанию команда tee
перезаписывает указанный файл, как и оператор >
. Чтобы добавить вывод в файл, вызовите команду с параметром -a
( --append
):
echo "this is a line" | tee -a file.txt
Если вы не хотите, чтобы tee
выводил данные на стандартный вывод, вы можете перенаправить его на /dev/null
:
echo "this is a line" | tee file.txt >/dev/null
Чтобы записать текст в несколько файлов, укажите файлы в качестве аргументов команды tee
:
echo "this is a line" | tee file_1.txt file_2.txt file_3.txt
Еще одно преимущество команды tee
заключается в том, что вы можете использовать ее вместе с sudo
и записывать в файлы, принадлежащие другим пользователям. Чтобы добавить текст в файл, в который у вас нет прав на запись, добавьте sudo
перед tee
:
echo "this is a line" | sudo tee file.txt
Выходные данные команды echo
передаются как входные в tee
, который повышает разрешения sudo и записывает текст в файл.
Выводы
В Linux для записи текста в файл используйте операторы перенаправления >
и >>
или команду tee
.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.