更新时间:2023-02-08 22:13:15
sed -ne '/rootNode/{ p; b }; /<appender /{ h; b }; /<logger /{ h; b }; H; /</logger>/{ x; p; b; }; /</appender>/{ x; /COM_Find[.]log/b; /COM_FIND[.]log/b; p }' file
输出:
<rootNode>
<appender name="CAT_FILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="C:/COM_Now.log"/>
<param name="Threshold" value="INFO"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="5000KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
</layout>
</appender>
<appender name="SERVER_FILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="C:/COM_A.log"/>
<param name="Threshold" value="INFO"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="5000KB"/>
<param name="MaxBackupIndex" value="5"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
</layout>
</appender>
<logger name="com.mycompany">
<level value="INFO"/>
<appender-ref ref="SERVER_FILE"/>
</logger>
</rootNode>
awk 的另一个:
awk '{ p = 1 } /<appender /{ t = $0; while (getline > 0) { t = t ORS $0; if (/COM_FIND[.]log/ || /COM_Find[.]log/) p = 0; if (/</appender>/) break } $0 = t } p' file
或者带有 IGNORECASE
的 GNU awk:
Or GNU awk with IGNORECASE
:
gawk -v IGNORECASE=1 '{ p = 1 } /<appender /{ t = $0; while (getline > 0) { t = t ORS $0; if (/COM_FIND[.]log/) p = 0; if (/</appender>/) break } $0 = t } p' file