ファイル内の一致する最初の行の前に複数行のテキストを挿入します。

ファイル内の一致する最初の行の前に複数行のテキストを挿入します。

log4jファイルに次の行を追加します。

log4j.appender.DRFA=org.apache.log4j.RollingFileAppender
log4j.appender.DRFA.MaxBackupIndex=100
log4j.appender.DRFA.MaxFileSize=10MB

ただし、この行は - という単語を含む最初の行の前に来る必要があります。日付パターン,線表示の有無にかかわらず

#log4j.appender.DRFA.DatePattern=.yyyy-MM-dd

または

log4j.appender.DRFA.DatePattern=.yyyy-MM-dd

注 - ファイルにDatePatternという単語が複数回表示される場合は、DatePatternを含む最初の行の前にのみこの3行を設定する必要があります。

例1(予想出力)

log4j.appender.DRFA=org.apache.log4j.RollingFileAppender
log4j.appender.DRFA.MaxBackupIndex=100
log4j.appender.DRFA.MaxFileSize=10MB


#log4j.appender.DRFA.DatePattern=.yyyy-MM-dd

例2(予想出力)

log4j.appender.DRFA=org.apache.log4j.RollingFileAppender
log4j.appender.DRFA.MaxBackupIndex=100
log4j.appender.DRFA.MaxFileSize=10MB


log4j.appender.DRFA.DatePattern=.yyyy-MM-dd

ベストアンサー1

使用awk:

awk 'done != 1 && /DatePattern/ {
    print "log4j.appender.DRFA=org.apache.log4j.RollingFileAppender"
    print "log4j.appender.DRFA.MaxBackupIndex=100"
    print "log4j.appender.DRFA.MaxFileSize=10MB"
    done = 1
    } 1' file >newfile && mv newfile file

DatePatternファイルで最初の一致が発生すると、3行が印刷されます。次に、その行が再印刷されないようにdoneフラグを設定します。1最後に末尾がある場合、1データのすべての行が印刷されます。

出力の3行の後に空白行が必要な場合は、最後の\n\n文字列の末尾に追加してください。

出力が記録されnewfileawk異常なエラーが発生しない場合、awkプロセスが終了すると元の出力が置き換えられます。


コメントでリクエスト:行を追加する後ろに一致する行、

awk '1; done != 1 && /DatePattern/ {
    print "log4j.appender.DRFA=org.apache.log4j.RollingFileAppender"
    print "log4j.appender.DRFA.MaxBackupIndex=100"
    print "log4j.appender.DRFA.MaxFileSize=10MB"
    done = 1
    }' file

パターンが一致したときに実行されるコードの前に移動します1(各入力行は印刷されて置き換えることができます)。{ print }

おすすめ記事