Как заменить совпадающую строку, если строка n+2 не содержит определенной строки

sed -i.bak 's_--config-file /etc/neutron/plugin.ini_& --config-file /etc/neutron/plugins/ml2/ml2_conf_cisco_apic.ini_' /usr/lib/systemd/system/neutron-server.service  

Исходный файл будет сохранен как neutron-server.service.bak. Просто найдите строку, после которой нужно что-то вставить, и замените ее этой строкой, за которой следует вставка. Использование _вместо /для разделителя sedделает сегменты замены до -и после -намного менее пикетными -.

-1
21.06.2019, 19:44
2 ответа

либо синтаксический анализатор, либо загрузка строк в такой буфер:

awk '{line=line1;
      line1=line2;
      line2=$0;}
     /com.icc.id.version/ { if (line ~ "com.icc.id")
       { line =... replace... }
     }
     {print line}
     END {print line1; print line}'

Примечание :Я не проверял, но должно быть очень близко

-1
28.04.2021, 23:32

Поскольку мы вводим данные (с помощью$1)в правую часть команды s///sed, нам нужно правильно заключить их в кавычки, чтобы при их подключении к коду sed не возникало ошибок. сработал.

Примечание. :Как вам уже было указано, правильный способ приблизиться к этому — использовать инструмент xml.

$ v1_esc=$(printf '%s\n' "$1" | sed -e 's:[\/&]:\\&:g;$!s/$/\\/')
$ sed -e '
   /com[.]icc[.]id/!b
   $!N;$!N;/\n.*\n/!q
   /.*\n.*\n.*com[.]icc[.]id[.]version/b
   '"s/com[.]icc[.]id\\(.*\\n.*\\n\\)/com.uxpsystems.${var}\\1/"'
' pom.xml

Пояснение:

  • Пропустите неинтересные строки и распечатайте их как есть.
  • Захватите 3 строки, начиная отсчет с интересующей строки.
  • Во время этого процесса захвата 3 строк у вас заканчиваются строки, то есть вы достигаете eof, затем просто выпрыгиваете и печатаете пространство шаблона как есть.
  • , если нам удалось добраться сюда, значит, у нас есть 3 строки в пространстве шаблонов, на которые sedможно посмотреть, и первая из них — интересная строка.
  • пропустить обработку этого блока из 3 строк на тот случай, если в 3-й строке не окажется заданной строки com.icc.id.version, и вывести ее как есть.
  • мы здесь означает, что правый блок из 3 строк наконец-то обнаружен, и теперь вы должны выполнить желаемую подстановку.
0
28.04.2021, 23:32

Теги

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