Добавить текст в файл с помощью sed

Как написать текст в файл с помощью sed? Более конкретно, я бы добавил, что в пустой текстовый файл, созданный с помощью touch, добавлены нулевые переменные. Синтаксис 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, если это вам нужно.