Сопоставьте шаблон и замените первый экземпляр следующей за ним строки

Браузеры часто кешируют http 301, http://getluky.net/2010/12/14/301-redirects-cannot-be-undon / - хорошее чтение.

Работает ли он в браузере, который вы раньше не использовали на сайте?

Также откройте инструменты разработчика своего браузера, чтобы узнать, получает ли он перенаправление после очистки кеша

3
27.01.2017, 06:30
4 ответа

Вы можете ограничить sed только для изменения определенной строки:

 sed -i '3s/enabled = 0/enabled = 1/g' file

Это изменит только 3-ю строку для [purple]

0
27.01.2020, 21:15

Вот решение, использующее Perl, при условии, что ваша конфигурация находится в config.ini :

perl -000 -n -i -e 's/^enabled = 0$/enabled = 1/m if /^\[shovel\]\n/; print;' config.ini

Это делает следующее:

  • -000 - читать файл в режиме абзаца, по сути то же самое как выполнение $ / = "\ n \ n"; в коде.
  • -n - запустить указанный код внутри цикла while (<>) {} .
  • -i - оперативное редактирование указанного файла вместо вывода на стандартный вывод. При желании вы можете указать расширение, которое приведет к резервному копированию входного файла с этим расширением. Например, -i.bak создаст файл резервной копии с именем config.ini.bak .
  • -e - Выполняет указанный код Perl.

Сам код говорит о замене строк, содержащих ровно enabled = 0 , на enabled = 1 , если входной «абзац» начинается с [лопатка] на линия сама по себе. [ и ] необходимо экранировать, поскольку они обычно имеют особое значение в регулярном выражении.

0
27.01.2020, 21:15

Вы можете попробовать это решение на awk

awk '/shovel/{flag=1}flag&&/enabled/{$NF=1;flag=0}1' input
0
27.01.2020, 21:15

В sed вы можете использовать диапазон (останавливаясь на пустой строке в конце категории [лопата] ):

sed '/\[shovel\]/,/^$/ s/enabled = 0/enabled = 1/' file

первая часть / \ [shovel \] /, / ^ $ / означает найти строку с [shovel] , продолжайте идти, пока не найдете пустую строку, и выполните следующие команды (в данном случае простой s / old / new ) только для этой части файла

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

sed '/\[shovel\]/,/^$/ s|enabled = 0|enabled = 1|' file

или

sed '\|\[shovel\]|, |^$| s|enabled = 0|enabled = 1|' file
6
27.01.2020, 21:15

Теги

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