Вместо использования sed, который читает строку за строкой, вы можете использовать perl с режимом -0 .Например, вы можете захватить эту часть в группе 1:
[monitor:///var/log/messages]
sourcetype=linux
index=
, а затем сопоставить power
.
Затем при замене вы можете сослаться на группу 1 и добавить безопасный $1secure
так что это заменит согласованную мощность.
(\[monitor:///var/log/(?:messages|secure)\](?:(?:\R.*){2})index=)power
Regex demo
perl -0p -i.bak -e 's#(\[monitor:///var/log/(?:messages|secure)\](?:(?:\R.*){2})index=)power#$1secure#g' inputs.conf
Результат:
[monitor:///var/log/messages]
sourcetype=linux
index=secure
Update
Если вы хотите сопоставить какое-либо из перечисленных слов из комментариев и заменить те, которые идут после индекса, вы можете использовать 2 группы захвата:
perl -0p -i.bak -e 's#(\[monitor:///var/log/(messages|secure|cron|spooler|audit\.log)\](?:(?:\R.*){2})index=).*#$1$2#g' inputs.conf
Pattern
(\[monitor:///var/log/(messages|secure|cron|spooler|audit\.log)\](?:(?:\R.*){2})index=).*
Regex demo
Результат:
[monitor:///var/log/messages]
sourcetype=linux
index=messages
[monitor:///var/log/secure]
sourcetype=linux
index=secure