Как дополнить начало файла текстом из STDIN

Серия команд, которые вы упоминаете в вопросе, не добавляет каретку -возвращает (^Mвещи )в ваш текстовый файл.

Однако, если в файле уже есть символы каретки -в конце каждой строки, которые есть во всех текстовых файлах DOS, тогда в файл будут добавлены не -строки DOS, что означает, что текстовый файл, после редактирования некоторые строки являются текстовыми строками Unix, а некоторые строки являются текстовыми строками DOS. В каком бы редакторе вы ни просматривали файл, он должен попытаться выяснить, что с этим делать, и решить отобразить его как текстовый файл Unix с отображением возврата каретки -, поскольку^M(vimсделал бы это, например ).

Решение состоит в том, чтобы запустить dos2unixдля вашего файла wp-config.php. Он мог бы обрабатывать смешанные типы строк и преобразовывал бы весь файл в текстовый файл Unix.

Также обратите внимание, что edсценарий редактирования не будет чисто заменять строку put your unique phrase hereв документе. Учитывая документ

000
AAA
put your unique phrase here
BBB
XXX

... последовательность команд будет генерировать

000
AAA
BBB
define('AUTH_KEY',...
...
XXX

(обратите внимание на расположение строки BBBдо и после ). Чтобы исправить это, чтобы строки defineдобавлялись перед BBBв тексте выше, измените команду aна команду i, т.е. вставьте перед текущей строкой , а не добавляйте после нее. ("текущая строка" будет строкой BBB, так как эта строка находится сразу после строки, измененной командой g//d).

1
23.03.2021, 23:32
2 ответа

Добавление строк в начале файла не так просто, как кажется, и обычно используется временный файл (, подобный тому, что sed -iделает )за сценой.

cat > data.new && mv data.new "$profile_target"

или более быстрое решение, но требующее внешнего инструмента(spongeизmoreutils):

cat - "$profile_target" | sponge "$profile_target"

Примечание:

  • Это не проверяет, является ли ввод пустым (исходящим из стандартного ввода ), потому что если это так, он добавит пробел/пробел в начале файла.

  • Это также не приводит к ошибкам дескриптора. Поэтому убедитесь, что у вас есть резервная копия любого файла, в котором вы это используете, или используйте более безопасный подход.

ссылки:Как добавить строки/текст в начало файла

0
28.04.2021, 22:57

Замените эту команду версией GNU sed.

tee -a "$profile_target" 
sed -i -e '1r /dev/stdin' -e '1N' "$profile_target"
  • Предположим, что введено как минимум 2 строки.
1
28.04.2021, 22:57

Теги

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