SED: insert something after the second last line

sed

In a XML configuration file I need to add a line, in order to not to break the last closing tag. Is it possible to do it with SED ?

The number of line of the whole file can change from a server to another…

Edit :
Some exemple of file I need to edit :

<configuration>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <root level="debug">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

An other exemple:

  <?xml version="1.0" encoding="UTF-8"?>
  <configuration>

    <property name="DEV_HOME" value="c:/logs" />

    <appender name="FILE-AUDIT"
      class="ch.qos.logback.core.rolling.RollingFileAppender">
      <file>${DEV_HOME}/debug.log</file>
      <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>
          %d{yyyy-MM-dd HH:mm:ss} - %msg%n
        </Pattern>
      </encoder>

      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- rollover daily -->
        <fileNamePattern>${DEV_HOME}/archived/debug.%d{yyyy-MM-dd}.%i.log
                          </fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
          class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
          <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
      </rollingPolicy>

    </appender>

    <logger name="com.mkyong.web" level="debug"
      additivity="false">
      <appender-ref ref="FILE-AUDIT" />
    </logger>

    <root level="error">
      <appender-ref ref="FILE-AUDIT" />
    </root>

    <logger name="com.mkyong.ext" level="debug"
      additivity="false">
      <appender-ref ref="FILE-AUDIT" />
    </logger>

      <logger name="com.mkyong.other" level="info"
      additivity="false">
      <appender-ref ref="FILE-AUDIT" />
    </logger>

      <logger name="com.mkyong.commons" level="debug"
      additivity="false">
      <appender-ref ref="FILE-AUDIT" />
    </logger>
  </configuration>

Best Answer

To insert a line before the last ($) one:

$ cat test
one
two
three
four
five

$ sed '$i<hello>!' test
one
two
three
four
<hello>!
five

That's for GNU sed (and beware leading spaces or tabs are stripped). Portably (or with GNU sed, if you want to preserve the leading spaces or tabs in the inserted line), you'd need:

sed '$i\
<hello>!' test
Related Question