
Строка, которую мне нужно изменить в драйвере оборудования.confфайл выглядит следующим образом:
options rsi_sdio dev_oper_mode=13
Выглядит достаточно просто, но разработчики с радостью меняют эту строку, что нарушает выражение sed, совпадающее с точностью. Теперь мне приходится считать строку, предшествующую значению, "неопределенной"; ее нельзя надежно предсказать со 100% точностью.
Поэтому я могу сопоставить только само значение, которое само по себе может быть переменным: в настоящее время это "13", но это может измениться в будущем. Единственное "известное" - это значение, которое мне нужно изменить, оно может быть длиной в 1 или 2 цифры.
Поэтому мне нужно надежное регулярное выражение, которое может гарантировать, что значение может быть успешно установлено, даже если и строка, и значение изменятся, чтобы избежать поломки!
решение1
Это на самом деле вызвало огромный перерыв в беспроводном подключении, когда разработчики бросили мне этот крученый мяч. Поскольку это ситуация, в которой могут оказаться многие, я опубликую свое решение:
sed -E -i 's/=[0-9]{1,2}$/=6/' /etc/modprobe.d/rs9113.conf
Это соответствует знаку равенства, за которым следует как минимум 1 цифра, но до 2 цифр. Таким образом, строка может измениться, и даже значение по умолчанию "13" может измениться, но это регулярное выражение должно оставаться перспективным в будущем.
Надеюсь, что другие, имеющие дело с таким типом большой изменчивости, найдут этот подход полезным для обеспечения корректности своих сценариев.