Мне нужно отредактировать файл следующим образом:
auto wlx00
allow-hotplug wlx00
iface wlx000 inet dhcp
iface wlx000 inet6 auto
post-up sysctl -w net.ipv6.conf.wlx000.accept_ra=2
auto wlx000
цель состоит в том, чтобы удалить строки, начинающиеся с 'iface ... inet6', а также удалить следующие несколько, которые начинаются с пробела (может быть ни одного или больше чем один):
iface wlx000 inet6 auto
post-up sysctl -w net.ipv6.conf.wlx000.accept_ra=2
и оставьте нетронутым для следующего результата:
auto wlx00
allow-hotplug wlx00
iface wlx000 inet dhcp
auto wlx000
Я попытался с помощью Sed следующим образом:
sed -i.old -r -e "/iface\s*\w*\s*inet6.*/,\${d;/^\s.*/d;}" /etc/configfile
но он удаляет все, начиная с нужного места, но стирая до конца. Я просто хочу удалить строки, начинающиеся с пробела после текста select iface.
Ответы:
Попробуйте эту адаптацию вашего
sed
одного лайнера:Он соответствует диапазону от вашего первого шаблона до первой строки, НЕ начинающейся с пробела, и удаляет строки, начинающиеся с пробела или «i» (для ведущего
iface
). Необходимо переосмыслить, еслиi
потребуется после блока.Похоже, это работает:
Пожалуйста, попробуйте и доложите.
источник
Скрипт для стандарта,
sed
который использует явный цикл для удаления строк:Сценарий находит
inet6
строки, а затем добавляет следующую строку к этой строке внутри пространства шаблона (со встроенным символом новой строки между ними). Затем он удаляет пространство шаблона вплоть до первого символа новой строки (это удаляет исходнуюinet6
строку). Это продолжается до тех пор, пока пробел не начинается с пустого символа (пробел или табуляция).Тестирование:
Тестирование на искусственных данных:
Скрипт в виде «однострочника»:
источник
У вас уже есть хорошие ответы на
sed
инструмент, но позвольте мне предложить другой, я полагаю, гораздо более простой, подход с использованиемpcregrep
:Регулярное выражение должно быть самоочевидным - мы ищем шаблон, начиная со строки,
^iface.*inet6
а затем группу любого символа ИЛИ новую строку, за которой следует один пробел, повторяемый ноль или более раз. Тогда нам просто нужно датьpcregrep
разрешение на многолинейное сопоставление с-M
опцией и полностью изменить все на-v
(подобранная часть будет удалена).источник
pcregrep
, гораздо более интуитивно понятный.