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
文字列の末尾に追加してください。
出力が記録されnewfile
、awk
異常なエラーが発生しない場合、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 }
答え2
あなたの質問を正しく理解したら、次の行を変更するだけです。
log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
-or-
#log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
次の行を使用してください。
log4j.appender.DRFA=org.apache.log4j.RollingFileAppender
log4j.appender.DRFA.MaxBackupIndex=100
log4j.appender.DRFA.MaxFileSize=10MB
log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
-or-
#log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
このGNUsed
コマンドを使用すると、次のことができます。
$ sed -i 's/\(.*appender.DRFA.DatePattern=.*\)/log4j.appender.DRFA=org.apache.log4j.RollingFileAppender\nlog4j.appender.DRFA.MaxBackupIndex=100\nlog4j.appender.DRFA.MaxFileSize=10MB\n\n\n\1/' log4j.properties
ラインコピーについて。このアフェンダーを複数回定義しないでください。
appender.DRFA.DatePattern
DatePattern
したがって、私たちは探している行よりも具体的にこのイベントを見つけることができます。
実行例
次の行のみを含むサンプルファイルは次のとおりです。
$ cat log4j.properties
#log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
sed
ファイルに対して上記のコマンドを実行します。
$ cat log4j.properties
log4j.appender.DRFA=org.apache.log4j.RollingFileAppender
log4j.appender.DRFA.MaxBackupIndex=100
log4j.appender.DRFA.MaxFileSize=10MB
#log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
答え3
これにより、GNU sed
次のように処理することもできます。
sed -i -e '
/DatePattern/!b
i\
log4j.appender.DRFA=org.apache.log4j.RollingFileAppender\
log4j.appender.DRFA.MaxBackupIndex=100\
log4j.appender.DRFA.MaxFileSize=10MB
:a;n;$!ba
' input.file
DatePattern
ファイルの最後の行にはないと確信している場合は、次のようにすることもできます。
sed -i -e '
/DatePattern/!b
r file2add.txt
N;:a;n;$!ba
' input.file
ファイルに追加するすべての行を配置します(例:file2add.txt
.)注:この方法では、ファイルに末尾のバックスラッシュを追加しませんfile2add.txt
。
答え4
これはed
標準ファイルエディタに非常に適しています。
/DatePattern/i
log4j.appender.DRFA=org.apache.log4j.RollingFileAppender
log4j.appender.DRFA.MaxBackupIndex=100
log4j.appender.DRFA.MaxFileSize=10MB
.
wq