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
делает сегменты замены до -и после -намного менее пикетными -.
либо синтаксический анализатор, либо загрузка строк в такой буфер:
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
)в правую часть команды 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
Пояснение:
sed
можно посмотреть, и первая из них — интересная строка.