Как написать текст в файл с помощью sed? Более конкретно, я бы добавил, что в пустой текстовый файл, созданный с помощью touch, добавлены нулевые переменные. Синтаксис sed очень смущает меня.
Добавить текст в файл с помощью sed
Ответ 1
Если вы просто добавляете текст в конец файла, вы не будете использовать sed в первую очередь.
echo "some text" >> somefile.txt
Ответ 2
Используйте $ a
.
sed -i "$ a some text" somefile.txt
Ответ 3
Добавление позднего сообщения, потому что, хотя принятый ответ является самым простым решением этой проблемы, на самом деле вопрос подчеркивает пару общих ситуаций:
- Необходимо отредактировать файл через sudo
- Попытка использовать
sed
для изменения пустого файла.
Короче говоря, вы не можете touch
, а затем отредактируйте файл с помощью sed
.
Sed не работает на пустые файлы, но иногда вам нужно сделать эквивалент
sudo echo "some text" >> somefile.txt
sudo не нравится перенаправление, но есть обходные пути:
echo "some text" | sudo tee somefile.txt
или если каналы тоже не являются опцией, или вы просто должны использовать sed, или вы просто как сложность:
dd if=/dev/zero count=1 bs=1 of=somefile.txt
sed -i '$ a some text' somefile.txt
sed -i '1 d' somefile
На некоторых системах. вам может потребоваться использовать sed -i -e '$ a ...
Ответ 4
Это звучит как XY Problem для меня. Вы можете получить более качественные или более полезные ответы, если зададите вопрос о том, какую проблему вы пытаетесь решить, вместо того, чтобы обращаться за помощью к конкретному решению.
Но если вы абсолютно должны это сделать в sed, вы можете использовать команду sed r
для чтения файла. Например:
[[email protected] ~/tmp]$ cat one
RED
BLUE
[[email protected] ~/tmp]$ cat two
green
yellow
[[email protected] ~/tmp]$ echo ">> start"; sed '$r two' one; echo ">> end"
>> start
RED
BLUE
green
yellow
>> end
[[email protected] ~/tmp]$
Команда sed $r two
приводит к тому, что sed обрабатывает файл с именем "два" после обработки последней строки ввода (что в данном случае относится к файлу "один" ).
Обратите внимание, что это объединяет один файл в поток другого файла, но sed "стандартный вывод" (stdout
) - это то, что содержит полный/комбинированный поток. Вы можете перенаправить этот вывод в файл на ответ Ignacio, если это вам нужно.