Как настроить n-е число в строке?

Если вы переместите /bootв свою корневую файловую систему, вы получите тот объем хранилища, который есть в вашей корневой файловой системе, и больше не будете ограничены размером загрузочного раздела.

Настройка загрузчика GRUB — деликатная операция. В следующем процессе я снижаю риск, не внося никаких изменений, которые нельзя легко отменить. Этот процесс включает перемещение /bootи последующее обновление загрузчика.

Перемещение /boot

В настоящее время /bootнаходится в разделе, отдельном от корневой файловой системы. Безопасный способ перемещения — это копирование , а не перемещение файлов :

.

umount /boot
mount /dev/sd?? /mnt
cp -av /mnt/* /boot/

Копирование файлов включает в себяumount-установку /boot, монтирование в другом месте и копирование файлов из смонтированного местоположения в /boot.

Затем отредактируйте /etc/fstabи закомментируйте строку, которая монтирует /boot.

Обновление загрузчика

Прежде чем обновлять загрузчик,лучше всего сделать тест, чтобы убедиться, что GRUB может загружаться из перемещенных файлов:

  1. Откройте /boot/grub/grub.confи запишите строки kernelи initrd, используемые для загрузки ядра ОС Cent. Вы будете вводить их вручную для теста.
  2. Перезагрузите машину.
  3. На экране GRUB нажмите «c»
  4. В командной строке GRUB введите find /boot/grub/stage1. Он должен вывести что-то вроде(hd0,5). Это должно соответствовать диску и разделу корневой файловой системы.
  5. Введитеroot (hd0,5)(или что-то другое, напечатанное предыдущей командой)
  6. Введите строку kernel, которую вы записали. Что-то вроде:kernel /boot/vmlinuz-2.6.18-238.19.1.el5.centos.plusPAE ro root=/dev/sda6
  7. Введите строку initrd, которую вы записали. Что-то вроде:initrd /boot/initrd-2.6.18-238.19.1.el5.centos.plusPAE.img
  8. Введите bootдля загрузки ядра.

Если все пойдет хорошо, система должна загрузиться, а старый раздел /bootне должен быть смонтирован, что вы можете подтвердить с помощью команды mount.

Предполагая, что это сработало, сделать изменение загрузчика постоянным:

  1. Отредактируйте /boot/grub/grub.confи обновите строки root, kernelи initrdтак, как вы вводили их во время теста.
  2. Запустите grub, чтобы ввести приглашение GRUB. Чтобы уточнить, это делается из ОС Cent, а не путем перезагрузки.
  3. Аналогично тесту, введитеroot (hd0,5)(или любой другой раздел, который должен быть)
  4. Запустите setup (hd0), где hd0 — это диск, на который GRUB устанавливает свою MBR-стадию. Возможно, вы используете MBR диска или первый сектор раздела. Что бы это ни было, именно таким должно быть hd0 .

После этих шагов GRUB представит меню, которое загрузит ядро ​​из вашего нового /boot. Обратите внимание, что ваш загрузочный раздел все еще не поврежден.

Вы можете прочитать немного больше о GRUB и ОС Cent здесь:https://wiki.centos.org/HowTos/GrubInstallationОбратите особое внимание на раздел Примечания и предупреждения .

4
16.10.2019, 20:15
4 ответа

Использованиеawk:

awk '{ for (i=1;i<=NF;i++) { if ($i ~ /num2=/) {sub(/num2=/, "", $i); $i="num2="$i-5; print} } }' file

Это будет перебирать каждый столбец каждой строки в поисках столбца, содержащего num2=. Когда он найдет этот столбец, он:

  1. Удалитьnum2=-sub(/num2=/, "", $i)
  2. Переопределите этот столбец какnum2={oldnum-5}-$i="num2="$i-5
  3. Распечатать строку-print
6
27.01.2020, 20:46

[Просто потому, что я пытаюсь поближе познакомиться с Миллером -, для получения разнородного вывода требуется несколько прыжков через обручи]:

$ mlr --fs ' ' --repifs --ocsvlite --headerless-csv-output put '
    $num1 = "num1=".$num1; $num2 = "num2=".($num2-5)
' file
RANDOM TEXT num1=400 num2=10 RANDOM TEXT
RANDOM TEXT num1=300 num2=5 RANDOM TEXT
RANDOM TEXT num1=200 num2=0 RANDOM TEXT

Если ввод на самом деле является TSV, в котором некоторые столбцы могут содержать пробелы, то

$ mlr --fs '\t' --ocsvlite --headerless-csv-output put '
    $num1 = "num1=".$num1; $num2 = "num2=".($num2-5)
' file
RANDOM TEXT num1=400    num2=10 RANDOM TEXT
RANDOM TEXT num1=300    num2=5  RANDOM TEXT
RANDOM TEXT num1=200    num2=0  RANDOM TEXT
4
27.01.2020, 20:46

перл:

perl -pe 's/(?<=num2=)(\d+)/$1 - 5/e' file

Чтобы сохранить содержимое обратно в файл:

perl -i -pe...
5
27.01.2020, 20:46

Использование Vim:

vim +'g/^/exe "norm! 3Wf=5\<C-A>"' +wq file

Первый аргумент+запускает ряд операций в обычном режиме для каждой строки, увеличивая число в 5 раз. Он использует команду:globalдля запуска этого в каждой строке. Простое использование:normalс диапазоном %normбыло бы проще, если бы мы не использовалиCTRLAдля увеличения числа, а чтобы (легко )передаем этот управляющий символ в Vim, мы создаем команду в виде строки для запуска с :execute, поэтому нам нужен :global.

Второй аргумент + просто сохраняет файл .

Если формат RANDOM TEXT менее регулярен (или если вы просто предпочитаете регулярные выражения ), вместо этого вы можете использовать команду:substitute:

vim +'%s/num2=\zs\d\+/\=submatch(0) + 5' +wq file

При этом используется команда :substituteдля замены части Nв num2=Nсуществующим значением плюс пять.

0
27.01.2020, 20:46

Теги

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