Преобразование Regex

Я желаю сделать команду для редактирования /etc/default/grub и измените тайм-аут с 10 до 2. Кто-либо мог объяснить, как сделать это?

3
задан 30 April 2015 в 22:17

2 ответа

Можно использовать sed, perl и другие инструменты для этого. Вот два примера для sed и perl:


Используя sed:

Запустите пробный прогон

sudo sed 's/^GRUB_TIMEOUT=10$/GRUB_TIMEOUT=2/' /etc/default/grub

если это в порядке, то

sudo sed -i 's/^GRUB_TIMEOUT=10$/GRUB_TIMEOUT=2/' /etc/default/grub

от человека sed:

   -i[SUFFIX], --in-place[=SUFFIX]

          edit files in place (makes backup if SUFFIX supplied)

Объяснение:

  • ^GRUB_TIMEOUT=10$

    Regular expression visualization
    (источник: debuggex.com)

    Демонстрация Debuggex

    ^ - утверждайте положение в начале строки

    GRUB_TIMEOUT=10 соответствует символам GRUB_TIMEOUT=10 буквально (чувствительный к регистру)

    $ - утверждайте положение в конце строки

  • s - s-модификатор: одна строка


Используя perl и более универсальный:

Запустите пробный прогон

perl -pe 's/^(GRUB_TIMEOUT=)[0-9]+$/${1}2/' /etc/default/grub

если это в порядке, то

sudo perl -pi -e 's/^(GRUB_TIMEOUT=)[0-9]+$/${1}2/' /etc/default/grub
6
ответ дан 1 December 2019 в 13:25

Вот универсальный:

sudo sed -i.bak 's/^\(GRUB_TIMEOUT=\)[0-9]\+$/\12/' /etc/default/grub

Замена 2 (после того, как \1) с любым значением Вы хотите поместить.

  • s/OLD/NEW/ шаблон замены для sed.

  • i.bak отредактирует файл /etc/default/grub на месте, сохраняя исходный файл сохраненным как /etc/default.grub.bak. Если Вы не хотите резервное копирование, просто используют -i.

  • Мы соответствовали строке, которая запускается с GRUB_TIMEOUT= (Сохраненный им в группе так, чтобы мы могли обратиться к нему позже) и концы с одной или несколькими цифрами ([0-9]+).

  • В заменяющем разделе мы заменили цифры значением, которое мы хотим поместить, сохраняя ранее подобранную часть (обозначенный \1) как есть

1
ответ дан 1 December 2019 в 13:25

Другие вопросы по тегам:

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