Почему команда rpm имеет опцию «--pipe»?

Оказывается, я установил / usr / ports / lang / mosh , который является языком программирования, вместо / usr / ports / net / mosh , который мне нужен.

И вуаля.

8
17.10.2018, 19:32
3 ответа

Попробуйте эту адаптацию вашего sedодного вкладыша:

sed  '/iface\s*\w*\s*inet6.*/,/^[^ ]/ {/^[^ i]/!d}' file

Он сопоставляет диапазон от вашего первого шаблона до первой строки, НЕ начинающейся с пробела, и удаляет строки, начинающиеся с пробела или "i" (для начальногоiface). Нужно переосмыслить, если iтребуется после блока.

Похоже, это работает:

sed -n '/iface\s*\w*\s*inet6.*/ {:L; n; /^[ ]/bL;}; p' file

Пожалуйста, попробуйте и сообщите об этом.

7
27.01.2020, 20:09

Скрипт для стандарта sed, использующий явный цикл для удаления строк:

/^iface.* inet6/ {
    :again
    N
    s/.*\n//
    /^[[:blank:]]/b again
}

Сценарий находит строки inet6и затем добавляет следующую строку к этой строке внутри пространства шаблонов (со встроенным символом новой строки в -между ). Затем он удаляет пространство шаблона до первого символа новой строки (включительно, это удаляет исходную inet6строку ). Это продолжается до тех пор, пока пространство шаблона не начинается с пробела (, пробела или табуляции ).

Тестирование:

$ cat file
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
$ sed -f script.sed <file
auto wlx00
allow-hotplug wlx00
iface wlx000 inet dhcp
auto wlx000

Тестирование на искусственных данных:

$ cat file
something1
something2
iface have a inet6 here
   delete me
   me too
   same here
something3
something4
iface more something inet6
   be gone
   skip this
something5
$ sed -f script.sed <file
something1
something2
something3
something4
something5

Сценарий как "один -лайнер":

sed -e '/^iface.* inet6/ {' -e ':a' -e 'N;s/.*\n//;/^[[:blank:]]/ba' -e '}'
6
27.01.2020, 20:09

У вас уже есть хорошие ответы для инструмента sed, но позвольте мне предложить другой, я считаю, гораздо более простой подход с использованиемpcregrep:

pcregrep -Mv '^iface.*inet6(.|\n )*' file

Регулярное выражение должно быть понятным --мы ищем шаблон, начиная со строки ^iface.*inet6, а затем группируем любой символ ИЛИ новую строку, за которой следует один пробел, повторяющийся ноль или более раз. Затем нам просто нужно указать pcregrep, чтобы разрешить множественное -линейное сопоставление с опцией -Mи отменить все это с помощью-v(совпадающая часть будет удалена ).

3
27.01.2020, 20:09

Теги

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