I've an XML file logback-spring.xml.
Now, I want to replace string DEBUG with TRACE, wherever ref="logstash" occurs only in the next line.
The input file looks like below:
<logger name="com.abcd.tdi" level="DEBUG" additivity="false">
<appender-ref ref="logstash"/>
<appender-ref ref="Async-Appender"/>
</logger>
<springProfile name="dev">
<logger name="com.abcd.tdi" level="DEBUG" additivity="false">
<appender-ref ref="logstash"/>
</logger>
<springProfile name="dev">
<logger name="com.abcd.tdi" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
While using sed command I'm getting output twice in the replacement.
I have used the following sed command:
sed -n -e '/ref="logstash"/!h' -e '/ref="logstash"/{H;x;s/DEBUG/TRACE/}; p; ' logback-spring.xml
xmlstarlet) is preferred over using general-purpose text tools likesedorawk.