Наконец, с помощью этой помощи получен двойной контроль \n, работающий в sed. Немного глотка:
sed -Ei ':a;N;$!ba;s/^(#ServerRoot[^\n]*)\n\n/\1\nServerName localhost\n\n/' apache2.conf
И awk, который делает то же самое (дольше, но легче понять IMO). Логика и sponge объясняются в последнем разделе.
awk '{print}/^#ServerRoot/{getline; if($0=="") print "ServerName localhost"; print}' apache2.conf | sponge apache2.conf
Редактировать: sed не так сложно, как я думал изначально. Вы просто хотите сопоставить и добавить (команда a); вам не нужно заменять. Я тестировал следующие действия:
sed -i '/^#ServerRoot/a ServerName localhost' apache2.conf
Вы можете быть более конкретным в своем матче, если хотите, и я оставлю awk ниже ради потомства.
[d6 ]Редактирование довольно тривиально с awk, но для того, чтобы записать обратно в тот же файл, нам нужен либо временный файл-посредник, либо sponge (из пакета moreutils). Я покажу оба метода.
awk '{print}/^#ServerRoot/{print "ServerName localhost"}' apache2.conf > tmp
mv tmp apache2.conf
Или
awk '{print}/^#ServerRoot/{print "ServerName localhost"}' apache2.conf | sponge apache2.conf
awk просто печатает каждую найденную строку, но в случае соответствия для ^#ServerName затем записывает вашу строку ServerName. Я считаю, что этот вид обработки намного проще читать, чем произвольная «замена» с помощью sed.
Из того, что вы сказали, что хотите сделать, измените порядок загрузки по умолчанию, лучшим механизмом для этого является перенумеровать / переименовать файлы в /etc/grub.d, чтобы сначала загрузить (Windows?) загрузку (30_os-prober например, до 06_os-prober). Затем update-grub перепишет grub.cfg так, как вы хотите, и сохранит этот порядок для каждого обновления. Редактировать grub.cfg напрямую не рекомендуется, потому что он часто перезаписывается обновлениями ядра.
Теперь вы можете установить grub в файловую систему FAT, но не во время установки Ubuntu. Я сделал это однажды, когда я уничтожил Windows MBR на диске и не имел возможности переустановить его, поэтому я использовал grub для загрузчика, помещая загрузочный каталог на небольшие инструменты FAT или раздел восстановления Windows. Обратите внимание, что я не пытался выполнить двойную загрузку с этой настройкой, поэтому мне не нужно было беспокоиться о обновлениях grub.cfg.
Не путайте, как установка Ubuntu устанавливает ограничение на то, что grub может сделать, если запустить вручную. Установите Ubuntu в свой ext4, примите установку grub по умолчанию (MBR и файлы grub в / boot / grub). Запустите Ubuntu и установите FAT в / mnt (при условии, что вы описываете FAT во втором разделе):
sudo mount -tvfat /dev/sda2 /mnt
Создайте каталог с именем boot
sudo mkdir /mnt/boot
Вручную установите grub в раздел FAT:
sudo grub-install --boot-directory=/mnt
Ваша установка grub теперь отключает файлы на вашем разделе FAT, и вы можете редактировать их из Windows. Следите за любым «мусором», как возврат каретки. Редакторы Windows могут помещать в ваш файл grub.cfg (Ubuntu и большинство unixes просто используют линию в качестве терминатора строк). Однако обновления ядер приведут к тому, что новая информация о grub будет помещена в /boot/grub/grub.cfg, поэтому вам нужно будет отредактировать FAT grub.cfg или скопировать новый файл grub.cfg в FAT и отредактировать его снова ( или новое ядро не появится в загрузочном меню).
Из того, что вы сказали, что хотите сделать, измените порядок загрузки по умолчанию, лучшим механизмом для этого является перенумеровать / переименовать файлы в /etc/grub.d, чтобы сначала загрузить (Windows?) загрузку (30_os-prober например, до 06_os-prober). Затем update-grub перепишет grub.cfg так, как вы хотите, и сохранит этот порядок для каждого обновления. Редактировать grub.cfg напрямую не рекомендуется, потому что он часто перезаписывается обновлениями ядра.
Теперь вы можете установить grub в файловую систему FAT, но не во время установки Ubuntu. Я сделал это однажды, когда я уничтожил Windows MBR на диске и не имел возможности переустановить его, поэтому я использовал grub для загрузчика, помещая загрузочный каталог на небольшие инструменты FAT или раздел восстановления Windows. Обратите внимание, что я не пытался выполнить двойную загрузку с этой настройкой, поэтому мне не нужно было беспокоиться о обновлениях grub.cfg.
Не путайте, как установка Ubuntu устанавливает ограничение на то, что grub может сделать, если запустить вручную. Установите Ubuntu в свой ext4, примите установку grub по умолчанию (MBR и файлы grub в / boot / grub). Запустите Ubuntu и установите FAT в / mnt (при условии, что вы описываете FAT во втором разделе):
sudo mount -tvfat /dev/sda2 /mnt
Создайте каталог с именем boot
sudo mkdir /mnt/boot
Вручную установите grub в раздел FAT:
sudo grub-install --boot-directory=/mnt
Ваша установка grub теперь отключает файлы на вашем разделе FAT, и вы можете редактировать их из Windows. Следите за любым «мусором», как возврат каретки. Редакторы Windows могут помещать в ваш файл grub.cfg (Ubuntu и большинство unixes просто используют линию в качестве терминатора строк). Однако обновления ядер приведут к тому, что новая информация о grub будет помещена в /boot/grub/grub.cfg, поэтому вам нужно будет отредактировать FAT grub.cfg или скопировать новый файл grub.cfg в FAT и отредактировать его снова ( или новое ядро не появится в загрузочном меню).
Из того, что вы сказали, что хотите сделать, измените порядок загрузки по умолчанию, лучшим механизмом для этого является перенумеровать / переименовать файлы в /etc/grub.d, чтобы сначала загрузить (Windows?) загрузку (30_os-prober например, до 06_os-prober). Затем update-grub перепишет grub.cfg так, как вы хотите, и сохранит этот порядок для каждого обновления. Редактировать grub.cfg напрямую не рекомендуется, потому что он часто перезаписывается обновлениями ядра.
Теперь вы можете установить grub в файловую систему FAT, но не во время установки Ubuntu. Я сделал это однажды, когда я уничтожил Windows MBR на диске и не имел возможности переустановить его, поэтому я использовал grub для загрузчика, помещая загрузочный каталог на небольшие инструменты FAT или раздел восстановления Windows. Обратите внимание, что я не пытался выполнить двойную загрузку с этой настройкой, поэтому мне не нужно было беспокоиться о обновлениях grub.cfg.
Не путайте, как установка Ubuntu устанавливает ограничение на то, что grub может сделать, если запустить вручную. Установите Ubuntu в свой ext4, примите установку grub по умолчанию (MBR и файлы grub в / boot / grub). Запустите Ubuntu и установите FAT в / mnt (при условии, что вы описываете FAT во втором разделе):
sudo mount -tvfat /dev/sda2 /mnt
Создайте каталог с именем boot
sudo mkdir /mnt/boot
Вручную установите grub в раздел FAT:
sudo grub-install --boot-directory=/mnt
Ваша установка grub теперь отключает файлы на вашем разделе FAT, и вы можете редактировать их из Windows. Следите за любым «мусором», как возврат каретки. Редакторы Windows могут помещать в ваш файл grub.cfg (Ubuntu и большинство unixes просто используют линию в качестве терминатора строк). Однако обновления ядер приведут к тому, что новая информация о grub будет помещена в /boot/grub/grub.cfg, поэтому вам нужно будет отредактировать FAT grub.cfg или скопировать новый файл grub.cfg в FAT и отредактировать его снова ( или новое ядро не появится в загрузочном меню).