вставить оператор EOF перед последней строкой файла

Хорошей альтернативой может стать использование облачной среды разработки, такой как Codevny или Cloud9.

Они имеют много преимуществ перед локальными файловыми установками (как подробно описано на их страницах) и больше соответствуют всей концепции Chrome OS, т.е. локальное устройство должно быть экономным, дешевым (но удобным!) и потенциально одноразовым (т.е. если вы прольете на него латте или кто-то его украдет, не дай бог, вы просто купите новый и продолжите работу без перерыва).

Они также предлагают конкурентоспособные цены для тех видов нагрузок, которые нужны студентам (например, вы можете платить ~0-20 баксов в месяц за достаточно тяжелую нагрузку, необходимую для всех ваших упражнений (обычно они не требуют много оперативной памяти или работают 24/7 в любом случае).

В качестве побочного преимущества вы также научитесь использовать инструменты, которые становятся незаменимыми в работе современных разработчиков, связанных с крупномасштабными совместными проектами, поскольку установки на локальных хостах, как известно, трудно воспроизвести (чтобы узнать несколько предвзятое мнение об этом, посмотрите здесь).

3
02.03.2019, 04:15
3 ответа

Для этого можно использовать ex(, который является режимом редактора vi).

Вы можете использовать команду:readдля вставки содержимого в файл. Эта команда принимает имя файла, но вы можете использовать псевдоустройство /dev/stdin-для чтения из стандартного ввода, что позволяет использовать маркер <<EOF.

Команда :readтакже принимает диапазон, и вы можете использовать символ $-, который распадается на $, обозначающий последнюю строку файла, и -, чтобы вычесть из нее единицу, добраться до предпоследней строки файла. (Вы также можете использовать $-1.)

Собираем все воедино:

$ ex -s /etc/security/limits.conf -c '$-r /dev/stdin' -c 'wq' <<EOF
*    soft     nproc       65535    
*    hard     nproc       65535   
*    soft     nofile      65535   
*    hard     nofile      65535
root soft     nproc       65535
root hard     nproc       65535
root soft     nofile      65535
root hard     nofile      65535
EOF

-sсделать его бесшумным (не переключаться в визуальный режим,что заставило бы экран мигать. )$-rсокращенно (полное $-1readтакже сработало бы )и, наконец, wq— это то, как вы пишете и выходите в vi.:-)


ОБНОВЛЕНИЕ:Если вместо вставки перед последней строкой вы хотите вставить перед строкой с определенным содержимым (, например «#Конец файла» ), тогда просто используйте /search/шаблон для этого.

Например:

$ ex -s /etc/security/limits.conf -c '/^# End of file/-1r /dev/stdin' -c 'wq' <<EOF
...
EOF
5
27.01.2020, 21:08

Чтобы сохранить такой же формат документа здесь -и вставить заданный текст непосредственно перед последней строкой файла, попробуйте ed!

ed -s /etc/security/limits.conf << EOF
$ i
*    soft     nproc       65535    
*    hard     nproc       65535   
*    soft     nofile      65535   
*    hard     nofile      65535
root soft     nproc       65535
root hard     nproc       65535
root soft     nofile      65535
root hard     nofile      65535
.
wq
EOF

Это отправляет последовательность команд в ed, все в документе здесь -. Мы обращаемся к последней строке файла с помощью $и говорим, что мы хотели бы iвставить некоторый текст. Далее следует текст, как и в вашем примере; как только мы закончили со вставленным текстом, мы говорим ed, что закончили с одной точкой(.). Wзаписать файл обратно на диск, а затем quit.

Если вы хотите свернуть $ iв $i, вам нужно избежать знака доллара или использовать цитируемый здесь -документ (ed -s input << 'EOF'...), чтобы предотвратить расширение $iдо текущего значения iпеременная или пустая, если такая переменная не установлена.

7
27.01.2020, 21:08

Другой метод :печатать все, кроме последней строки файла, печатать новый текст, а затем печатать последнюю строку файла. Затем перенаправьте весь этот вывод в новый файл.

{
    sed '$d' limits.conf
    cat <<EOF
*    soft     nproc       65535
*    hard     nproc       65535
*    soft     nofile      65535
*    hard     nofile      65535
root soft     nproc       65535
root hard     nproc       65535
root soft     nofile      65535
root hard     nofile      65535
EOF
    tail -1 limits.conf
} > tmpfile && mv tmpfile limits.conf
0
27.01.2020, 21:08

Теги

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